N
nero32
Gast
Hallo Forum,
hab ein Problem mit meinem Java-Programm, hoffe jemand kann mir helfen.
Um es vereinfacht darzustellen, ich habe 2 Entity-Klassen: Bestellung und Bestelldetails, also eine typische OneToMany-Beziehung.
Die Klasse Bestellung enthält eine Collection bestelldetails. Wenn ich zu einer Bestellung neue Positionen hinzufüge, und die Bestellung mit persist speichern will, bekomme ich folgende Exception:
Habe inzwischen rausgefunden warum. Als Datenbank benutze ich die MaxDB, die ID's in der Tabelle in der Tabelle Bestelldetails sind sogenannte Autowert-Spalten (bei der MaxDB Typ: int, default serial(1)). Wenn eine neue Zeile in die Tabelle Bestelldetails eingefügt wird, versucht Toplink ein 'NULL' in die Spalte ID einzufügen, was bei der MaxDB nicht zulässig ist, also setze ich das Attribut ID, wenn ich ein neues Bestelldetails-Objekt erzeuge auf 0, damit klappt das Einfügen in die Datenbank und es wird automatisch eine neue ID vergeben. Das Problem ist nun aber, wenn ich mehr als ein Bestelldetails-Objekt in die Bestelldetails-Collection der Klasse Bestellung einfüge und alle eine 0 als ID haben, dann schlägt das "persist" natürlich fehl, Toplink denkt wohl, dass es sich jedesmal um ein und dasselbe Objekt handelt.
Wie kann ich das umgehen ? Hab schon versucht das Attribut ID auf insertable=false zu setzen, aber bei @Id-Attributen scheint das nicht zu funktionieren.
Ich hoffe, es ist einigermassen verständlich was ich hier geschrieben habe, für Hilfe wäre ich sehr dankbar.
Gruß
Tiberius
hab ein Problem mit meinem Java-Programm, hoffe jemand kann mir helfen.
Um es vereinfacht darzustellen, ich habe 2 Entity-Klassen: Bestellung und Bestelldetails, also eine typische OneToMany-Beziehung.
Die Klasse Bestellung enthält eine Collection bestelldetails. Wenn ich zu einer Bestellung neue Positionen hinzufüge, und die Bestellung mit persist speichern will, bekomme ich folgende Exception:
Code:
Exception in thread "main" javax.persistence.EntityExistsException:
Exception Description: Cannot persist detached object [shopsync.db.Bestelldetails[id=0]].
Class> shopsync.db.Bestelldetails Primary Key> [0]
Habe inzwischen rausgefunden warum. Als Datenbank benutze ich die MaxDB, die ID's in der Tabelle in der Tabelle Bestelldetails sind sogenannte Autowert-Spalten (bei der MaxDB Typ: int, default serial(1)). Wenn eine neue Zeile in die Tabelle Bestelldetails eingefügt wird, versucht Toplink ein 'NULL' in die Spalte ID einzufügen, was bei der MaxDB nicht zulässig ist, also setze ich das Attribut ID, wenn ich ein neues Bestelldetails-Objekt erzeuge auf 0, damit klappt das Einfügen in die Datenbank und es wird automatisch eine neue ID vergeben. Das Problem ist nun aber, wenn ich mehr als ein Bestelldetails-Objekt in die Bestelldetails-Collection der Klasse Bestellung einfüge und alle eine 0 als ID haben, dann schlägt das "persist" natürlich fehl, Toplink denkt wohl, dass es sich jedesmal um ein und dasselbe Objekt handelt.
Wie kann ich das umgehen ? Hab schon versucht das Attribut ID auf insertable=false zu setzen, aber bei @Id-Attributen scheint das nicht zu funktionieren.
Ich hoffe, es ist einigermassen verständlich was ich hier geschrieben habe, für Hilfe wäre ich sehr dankbar.
Gruß
Tiberius