Wir sind in unserem Hibernate-aktivierten Code auf eine TransientObjectException gestoßen. Zunächst war die Ausnahme sehr schwer zu reproduzieren und trat nur in sehr seltenen Fällen auf. Manchmal während unserer Integrationstests und manchmal während unserer Smoke-Tests.
Wir haben so ziemlich alles versucht, um herauszufinden, warum Hibernate die betreffenden Objekte als ungespeichert (d.h. transient) interpretiert, obwohl wir anhand der SQL-Protokollierung überprüft haben, dass sie tatsächlich in einer früheren Hibernate-Sitzung gespeichert wurden.
Es stellte sich heraus, dass Hibernate den Unterschied zwischen den Werten "0" und "null" nicht erkennt, wenn es die ID-Eigenschaft (ein java.lang.Long) betrachtet, um zu prüfen, ob das Objekt persistent ist. Da unsere Oracle-Sequenz bei 0 beginnt, hatte das erste Objekt, das persistiert wurde, eine ID von 0. Als dieses Objekt dann in einer späteren Sitzung verwendet wurde, erkannte Hibernate diesen Wert nicht als gültig und interpretierte das Objekt als transient.
MY_SEQ
[/code] Damit ist das Problem gelöst. Ob es sich dabei um einen Fehler oder eine Funktion in Hibernate handelt, überlasse ich den Lesern als Übung :)
Verfasst von

Age Mooij
Unsere Ideen
Weitere Blogs
Contact



