Ich habe eine User
(übergeordnete) und eine Home
(untergeordnete) Entitäten, die einer unidirektionalen Eins-zu-viele Beziehung folgen.
Mein Problem besteht darin, dass beim Hinzufügen eines neuen Home
zu einem User
das neu erstellte und beibehaltene Home
nicht das id
hat. Ist das normal? Muss ich das Kind manuell beibehalten, wenn ich die ID möchte?
Das sind meine Entitäten:
%Vor%Und der Code zum Aktualisieren der Eltern:
%Vor% An dieser Stelle nahm ich an, ich hätte home
, um die ID zu haben, die gerade gegeben wurde, wenn sie in db persistiert wurde, aber das tut sie nicht.
Ich habe bereits versucht, insertable = false
zum% code% der Home-ID hinzuzufügen, wie auf hier , aber es funktioniert auch nicht.
EntityManager.merge
Methodenimplementierung delegiert an Hibernate Session.merge
:
Kopieren Sie den Zustand des gegebenen Objekts auf das persistente Objekt mit dem gleiche Kennung. Wenn momentan keine persistente Instanz vorhanden ist der Sitzung zugeordnet ist, wird es geladen. Gib das Hartnäckige zurück Beispiel. Wenn die angegebene Instanz nicht gespeichert ist, speichern Sie eine Kopie von und gib es als neu persistente Instanz zurück. Die angegebene Instanz nicht mit der Sitzung verknüpft werden. Diese Operation führt zu Kaskaden verknüpfte Instanzen, wenn die Zuordnung zugeordnet ist
cascade="merge"
.
Beachten Sie den fett gedruckten Teil. Grundsätzlich wird die Operation merge
in die von Ihnen erstellte Instanz Home
kaskadiert, aber Hibernate erstellt eine Kopie dieser Instanz, fügt Ihre Instanz in die Kopie ein, speichert die Kopie und ersetzt Ihre Instanz durch die Kopie in User.homes
Sammlung.
Danach sollte User.homes
collection die Kopie der Home
-Instanz mit einer ordnungsgemäß initialisierten ID enthalten.
Tags und Links java jpa hibernate one-to-many