-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: persist(bestellung) ->cascade=PERSIST für bestellposten
PostPosted: Thu Dec 20, 2007 9:34 am 
Newbie

Joined: Thu Dec 20, 2007 9:26 am
Posts: 3
Hallo zusammen,

Ich versuche einen bestellvorgang mit Hibernate zu implementieren.
Dazu hab ich eine Tabelle Bestellung, eine Tabelle Posten, eine Tabell Artikel.
Die Tabelle Posten ist die Auflösung der m:n beziehung zwischen Artikel und Bestellung.
in Posten steht die anzahl für einen Artikel, die artnr(FK) die bestnr(FK) und eine ID(PK).
Die bestnr wird in der Tabelle Bestellung autogeneriert.

Wenn ich mit entitymanager.persist(bestellung) eine bestellung in der DB speicher, sollte hibernate ja die bestellposten(m:n beziehung zwischen artikel und bestellung)automatisch mitspeichern.
Problem ist nur, dass er für den FK(bestnr) in der tabelle posten einen NULL wert hat.

Er müsste doch eigentlich den soeben generierten Wert für FK(bestnr) automatisch beim speichern der posten als bestnr(FK) nehmen.

Hier die Fehlermeldung:
Caused by: java.sql.BatchUpdateException: Batch-Eintrag 0 insert into postgres.posten (anzahl, artnr, bestnr, posnr) values (1, 51, NULL, 15) wurde abgebrochen.

Hier noch das Mapping der m:n beziehung:

Posten:

@ManyToOne
@JoinColumn(name="bestnr")
private Bestellung bestellung;

@ManyToOne
@JoinColumn(name="artnr")
private Artikel artikel;

Bestellung:

@OneToMany(mappedBy="bestellung",cascade={ALL})
private List<Posten> artikelBestellungCollection =
new ArrayList<Posten>();


Jemand ne Idee, warum da NULL steht ??

Danke und Gruß


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jan 03, 2008 8:50 am 
Regular
Regular

Joined: Thu Apr 14, 2005 10:39 am
Posts: 115
Hi,

http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#entity-mapping-association-collections

Code:
@OneToMany(mappedBy="posten" ,cascade=CascadeType.ALL)
@JoinColumn(name="bestellung")

private List<Posten> artikelBestellungCollection =
new ArrayList<Posten>();


MappedBy ist nicht zwingend notwendig. Du verzichtest aber besser auf eine explizite Deklaration.

Ebnso vezichtest Du am besten auf diese Deklarationen.
Quote:
Posten:

@ManyToOne
@JoinColumn(name="bestnr")
private Bestellung bestellung;

@ManyToOne
@JoinColumn(name="artnr")
private Artikel artikel;



Zudem verweisen @JoinColumn auf bestehende Attribute und sind nicht zu umbenennen von Spalten gedacht. So wie es aus Deinen Codeschnipseln zu erahnen ist.

Wenn mit @JounColumn, dann aber so:
@JoinColumn(name="artikel")

@JoinColumn(name="bestellung")

Was aber eigentlich keinen Sinn ergibt.

Deine bisherige Deklaration ergibt nur Sinn, wenn
Du (VGl. 2.2.2.2. Declaring column attributes) die Tabellenspalten explizit z.B. mit @Column(name = "artnr") umbenannt hättest.

Somit ist
Code:
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="bestellung")
private List<Posten> artikelBestellungCollection =
new ArrayList<Posten>();


Alles was Du brauchst. Den Rest erledigt das Default-Mapping.

Viele Grüße Michael


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 08, 2008 1:52 pm 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Ich bin mir nicht ganz sicher, ob mein Vor-Poster ganz recht hat. Ich vermute folgendes Problem:

- Beziehungen nicht auf beiden Seiten gesetzt
posten.setBestellung
bestellung.getPosten().add(bestellung)

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.