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 Ai B(w relacji jeden do jednego, ale nie wymuszony ani modelowany przez JPA). Ama złożoną PK, która jest ustawiana ręcznie, a także ma automatycznie generowane pole IDENTITY recordId. To recordIdpowinno być napisane do podmiotu Bjako obcego-klucz do A. Oszczędzam Ai to Bw jednej transakcji. Problem polega na tym, że wartość generowane automatycznie A.recordIdnie 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?