Ich habe Informationen über die flush () -Methode gesammelt, bin mir aber nicht ganz sicher, wann und wie ich sie richtig verwenden soll. Nach dem, was ich gelesen habe, ist mein Verständnis, dass der Inhalt des Persistenzkontexts mit der Datenbank synchronisiert wird, dh ausstehende Anweisungen ausgeben oder Entitätsdaten aktualisieren.
Jetzt habe ich folgendes Szenario mit zwei Entitäten A
und B
(in einer Eins-zu-Eins-Beziehung, aber nicht von JPA erzwungen oder modelliert). A
hat eine zusammengesetzte PK, die manuell eingestellt wird, und hat auch ein automatisch generiertes IDENTITY-Feld recordId
. Dies recordId
sollte B
als Fremdschlüssel an die Entität geschrieben werden A
. Ich spare A
und B
in einer einzigen Transaktion. Das Problem ist, dass der automatisch generierte Wert A.recordId
innerhalb der Transaktion nicht verfügbar ist, es sei denn, ich rufe em.flush()
nach dem Aufruf explizit em.persist()
an A
. (Wenn ich eine automatisch generierte IDENTITY PK habe, wird der Wert direkt in der Entität aktualisiert, aber das ist hier nicht der Fall.)
Kann em.flush()
bei Verwendung innerhalb einer Transaktion Schaden anrichten?