T
tuxedo
Gast
Hallo zusammen,
ich hab ein kleines Hibernate/JPA Verständnis-Problem bei dem ich nicht weiter komme.
Ich hab folgende Entitäten:
Alle Many-to-Many Beziehungen sind auf Eager-Loading eingestellt. Die Entität EmUserGroup ist der Owner der Many-to-Many Beziehungen. Die Cascade-Optionen habe ich nach bestem WIssen und Gewissen konfiguriert und schon verschiedene Konstellationen ausprobiert.
Folgendes Szenatio möchte ich unter anderem gerne realisieren:
Ich habe verschiedene User die in verschiedenen Gruppen sind. Wenn ich nun eine Gruppe lösche, dann sollen die User bestehen bleiben, aber die Gruppenzugehörigkeit zur gelöschten Gruppe soll verloren gehen.
Im Detail:
Mein EntityManager hat diverse User-Entitäten bereits geladen. Irgendwann später soll eine Gruppe gelöscht werden. Das löschen funktioniert.
Aber irgendwie schafft es der EntityManager nicht, die bereits geladenen User dahingehen zu aktualisieren, dass eine bestimmte Gruppe nun nicht mehr da ist und demnach die User-Group-Relation aktualisiert werden muss. Nach dem löschen ist in der Liste mit Gruppen der betroffenen User die gelöschte Gruppe noch vorhanden. Der EntityManager der die User geladen hat und die Gruppe gelöscht hat ist ein und derselbe. Warum geht das nicht?
Ich hab das ganze (Maven-)Projekt mal gezippt und angehängt. Ist einfach zu groß um die ganzen Klassen hier zu posten. Das ganze ist auf das notwendigste reduztiert und ist prinzipiell lauffähig. Wäre echt klasse wenn mir da jemand weiterhelfen kann.
Mein Gefühl sagt mir dass ich entweder
a) die Sache mit dem Cascade falsch mache
oder
b) das was ich vor habe von JPA2 gar nicht komplett abgedeckt wird und ich teilweise selbst Hand anlegen muss
Gruß
Alex
Ach ja: Ich hab keine Annotationen benutzt, da ich in der späteren Anwendung detachte Entitäten serialisieren/deserialisieren will und dort keine JPA-Abhängigkeit durch verwendung von Annotationen vorhanden sein soll. Auch handelt es sich NICHt um eine JEE Anwendung. Verwende Hibernate/JPA hier im Desktop-Umfeld.
ich hab ein kleines Hibernate/JPA Verständnis-Problem bei dem ich nicht weiter komme.
Ich hab folgende Entitäten:
Code:
EmUser:
-id
-name
-Set<EmUserGroup> groups <---------- MANY-TO-MANY
Code:
EmUserGroup:
-id
-name
-Set<EmUser> users <---------- MANY-TO-MANY - OWNER
-Set<EmPermission> permissions <---------- MANY-TO-MANY - OWNER
Code:
EmPermission:
-id
-name
-Set<EmUserGroup> groups <---------- MANY-TO-MANY
Alle Many-to-Many Beziehungen sind auf Eager-Loading eingestellt. Die Entität EmUserGroup ist der Owner der Many-to-Many Beziehungen. Die Cascade-Optionen habe ich nach bestem WIssen und Gewissen konfiguriert und schon verschiedene Konstellationen ausprobiert.
Folgendes Szenatio möchte ich unter anderem gerne realisieren:
Ich habe verschiedene User die in verschiedenen Gruppen sind. Wenn ich nun eine Gruppe lösche, dann sollen die User bestehen bleiben, aber die Gruppenzugehörigkeit zur gelöschten Gruppe soll verloren gehen.
Im Detail:
Mein EntityManager hat diverse User-Entitäten bereits geladen. Irgendwann später soll eine Gruppe gelöscht werden. Das löschen funktioniert.
Aber irgendwie schafft es der EntityManager nicht, die bereits geladenen User dahingehen zu aktualisieren, dass eine bestimmte Gruppe nun nicht mehr da ist und demnach die User-Group-Relation aktualisiert werden muss. Nach dem löschen ist in der Liste mit Gruppen der betroffenen User die gelöschte Gruppe noch vorhanden. Der EntityManager der die User geladen hat und die Gruppe gelöscht hat ist ein und derselbe. Warum geht das nicht?
Ich hab das ganze (Maven-)Projekt mal gezippt und angehängt. Ist einfach zu groß um die ganzen Klassen hier zu posten. Das ganze ist auf das notwendigste reduztiert und ist prinzipiell lauffähig. Wäre echt klasse wenn mir da jemand weiterhelfen kann.
Mein Gefühl sagt mir dass ich entweder
a) die Sache mit dem Cascade falsch mache
oder
b) das was ich vor habe von JPA2 gar nicht komplett abgedeckt wird und ich teilweise selbst Hand anlegen muss
Gruß
Alex
Ach ja: Ich hab keine Annotationen benutzt, da ich in der späteren Anwendung detachte Entitäten serialisieren/deserialisieren will und dort keine JPA-Abhängigkeit durch verwendung von Annotationen vorhanden sein soll. Auch handelt es sich NICHt um eine JEE Anwendung. Verwende Hibernate/JPA hier im Desktop-Umfeld.