Zbierałem informacje o metodzie flush (), ale nie jestem do końca jasne, kiedy jej używać i jak używać jej poprawnie. Z tego, co przeczytałem, rozumiem, że zawartość kontekstu trwałości będzie synchronizowana z bazą danych, tj. Wydawanie zaległych oświadczeń lub odświeżanie danych encji.
Teraz mam następujący scenariusz z dwoma podmiotami A
i B
(w relacji jeden do jednego, ale nie wymuszony ani modelowany przez JPA). A
ma złożoną PK, która jest ustawiana ręcznie, a także ma automatycznie generowane pole IDENTITY recordId
. To recordId
powinno być napisane do podmiotu B
jako obcego-klucz do A
. Oszczędzam A
i to B
w jednej transakcji. Problem polega na tym, że wartość generowane automatycznie A.recordId
nie są dostępne w ramach transakcji, chyba że zrobić wyraźne wezwanie em.flush()
po wywołaniu em.persist()
na A
. (Jeśli mam automatycznie wygenerowany identyfikator PK IDENTITY, wartość jest bezpośrednio aktualizowana w encji, ale tak nie jest w tym przypadku).
Może em.flush()
wyrządzić jakąś szkodę podczas używania go w ramach transakcji?