Hibernate speichert nur das Basis-Objekt

Status
Nicht offen für weitere Antworten.

Rock Lobster

Bekanntes Mitglied
Hallo,

mein Problem ist folgendes:
Ich habe einen Exporter und Importer programmiert, den ich für 2 Projekte verwende. Beim ersten Projekt funktioniert alles tadellos, beim zweiten Projekt tritt aber komischerweise ein Fehler auf:

Und zwar generiere ich entsprechende Hibernate-Persistence-Objekte, die alle mit Werten befüllt werden, und die zum Teil auch zusammenhängen (z.B. eine Klasse Auto und dann eine andere Klasse Fahrer, die mit Auto::addToSetOfFahrer(Fahrer f) hinzugefügt werden kann). Die Klassen sind fast gleich wie im ersten Projekt. Seltsamerweise wird aber beim Einfügen (also session.save()) nur das Basis-Objekt, in diesem Beispiel Auto, gespeichert, und die gesamten angehängten Tabellen NICHT. Die Datenbank logt auch nur ein einziges SQL-Statement, das eben auch nur der Auto-Tabelle entspricht.

Der Importer-Code ist haargenau gleich, sprich, ich verwende das gleiche JAR für beide Projekte. Die Persistence-Klassen ähneln sich ebenfalls größtenteils. Es wird auch alles korrekt aufgebaut, wenn ich also einen Breakpoint vor dem save() setze und mir das Hibernate-Objekt anschaue, sind alle Sets und alle Werte befüllt.

Weiß jemand, an was das liegen könnte?
 
Ich habe noch einen weiteren Anhaltspunkt gefunden, und zwar habe ich gerade beim Debuggen bemerkt, daß die ID im Basis-Objekt nach dem save()-Aufruf korrekt auf einen neuen Wert gesetzt wird. Zudem wird das Set in ein PersistentSet konvertiert, beinhaltet immer noch den kompletten Baum, aber die einzelnen Elemente haben keine ID (bzw. die ID ist null).

Im Projekt 1, wo es funktioniert, werden die IDs jedoch korrekt generiert... jetzt ist nur die Frage, woran es liegt, daß es in Projekt 2 nicht passiert?
 
Okay das Problem hat sich bereits erledigt... es waren nur bei den Properties die Cascade-Attribute nicht gesetzt. Jetzt funktioniert es perfekt 😉
 
ansonsten zielführendes Vorgehen:
Java-Klassen und Mapping aus dem funktionierenden Projekt komplett kopieren,
deren Funktionalität testen

wenn es nicht geht, dann muss man weiter knobeln, aber dann kannst du wenigstens die Geschichte mit den 'leichten Änderungen' weglassen 😉

wenn es geht, dann nur noch Schritt für Schritt anpassen,
bis die Änderung, die den Fehler verursacht, gefunden wird,
oder bis eben deutlich ersichtlich ist, welche Properties vergessen wurden 😉
 
Ja stimmt, ist eigentlich eine gute Strategie. In meinen Fällen sind die Projekte allerdings riesig groß (also die sind nicht komplett von mir) und die einen Klassen in das andere zu kopieren könnte etwas schwierig werden 😉

Aber wenn man partout nicht weiterkommt, ist das natürlich auf jeden Fall das richtige Vorgehen!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben