2014-10-20 3 views
5

Ich habe eine neu erstellte Entität (losgelöst, weil noch nicht in der Datenbank gespeichert). Diese Entität enthält eine andere Entität, die bereits in der db existiert (aber auch losgelöst ist). Daher würde ich em.merge(myNewEntity) verwenden, um es zu speichern.Erhalten Sie Entity JPA ID nach dem Zusammenführen?

Wenn ich die neu erstellte ID bekommen möchte, würde ich danach em.flush() verwenden. Dann rufe ich myNewEntity.getId() auf. Mit persist erhalte ich eine ID, die von der DB/JPA erstellt wurde. Mit merge, tut es nicht. Die ID im Objekt bleibt null. Warum das?

+0

ist dies überwintern? – Leo

Antwort

13

Da Sie den Code nicht zur Verfügung gestellt haben, werde ich die Kristallkugel versuchen.

Das Ergebnis der Operation merge ist nicht dasselbe wie bei der Operation persist - die Entität, die an merge übergeben wurde, wird nicht verwaltet. Stattdessen wird eine verwaltete Kopie der Entität erstellt und zurückgegeben. Dies ist der Grund, warum die ursprüngliche neue Entität keine ID erhalten wird. Anstatt also

em.merge(newEntity); 
Long id = newEntity.getId(); 

sollte es sein

managedEntity = em.merge(newEntity); 
Long id = managedEntity.getId(); 
+0

einfach in der Kristallkugel raten, oder? Aber danke. Es ist dokumentiert und funktioniert wie Sie vorgeschlagen haben. – feder

+0

:) cool, du bist willkommen – kostja

Verwandte Themen