Hallo,
ich arbeite zur Zeit an einer Migration einer 3- Schichten- Architektur von JDO nach JPA.
Code:
==================================
GUI
==================================
Geschäftsprozessteuerung
==================================
Persistenz- Factory
----------------------------
Persistenzschicht
==================================
Da JDO und JPA eine sehr ähnliche API haben, sollte man meinen, dass eine Migration
relativ einfach von statten gehen sollte.
Eine Anforderung für das Projekt ist, dass nur die Persistenzschicht angepasst werden
soll, und weder GUI noch Geschäftsprozessteuerung verändert werden.
Die Persistenz- Factory (Abstract Factory Pattern) bietet ein Interface, um
die Persistenzschicht austauschbar zu machen, welche im wesentlichen aus
DAOs (Data Access Objects) besteht.
Das Problem besteht darin, dass das Model der Swing- GUI an das Model
der Entity- Klassen geknüpft ist.
Der Benutzer erzeugt also u.a. beim ausfüllen eines Formulars gleichzeitig
ein Entity- Objekt.
Wurde die Eingabemaske vom Benutzer durch klicken auf "Abbrechen"
rückgängig gemacht, wurde in der Persistenzschicht ein refresh(obj)
aufgerufen.
Problematisch ist, dass Hibernate hoffenbar refresh nur
auf vollständig persistenten Objektgraphen ausführen kann.
Bei dem Beispiel Kunde->Buchung, wobei Kunde im Zustand
managed und Buchung im Zustand new ist, wirft Hibernate die
folgende Exception, wenn man refresh(kunde) ausführt (wobei
die Beziehung zu Buchung eine Annotation CascadeType.Refresh besitzt):
"ERROR org.hibernate.AssertionFailure - an assertion failure occured
(this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: null identifier".
Hat jemand eine Idee, wie ich das Problem geschickt umgehen kann?
Ich wäre für jeden Hinweis dankbar.
Vielen Dank schonmal im Voraus.
Code:
Code: