Die ID des Kindes ist nicht vorhanden, nachdem die Kaskade den Elternteil beibehalten hat

8

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.

    
user3748908 11.12.2015, 15:38
quelle

1 Antwort

4

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.

    
Dragan Bozanovic 05.01.2016, 18:31
quelle

Tags und Links