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 Aund B(in einer Eins-zu-Eins-Beziehung, aber nicht von JPA erzwungen oder modelliert). Ahat eine zusammengesetzte PK, die manuell eingestellt wird, und hat auch ein automatisch generiertes IDENTITY-Feld recordId. Dies recordIdsollte Bals Fremdschlüssel an die Entität geschrieben werden A. Ich spare Aund Bin einer einzigen Transaktion. Das Problem ist, dass der automatisch generierte Wert A.recordIdinnerhalb 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?