Я собирал информацию о методе flush (), но не совсем понимаю, когда его использовать и как правильно использовать. Из того, что я прочитал, я понимаю, что содержимое контекста постоянства будет синхронизировано с базой данных, то есть выдача невыполненных инструкций или обновление данных объекта.
Теперь у меня есть следующий сценарий с двумя объектами A
и B
(в отношении один-к-одному, но не принудительно или смоделированным JPA). A
имеет составной PK, который устанавливается вручную, а также имеет автоматически сгенерированное поле IDENTITY recordId
. Это recordId
должно быть записано в объект B
как внешний ключ для A
. Сохраняю A
и B
в единой транзакции. Проблема заключается в том, что автоматически сгенерированное значение A.recordId
не доступно в сделке, если не сделать явный вызов em.flush()
после вызова em.persist()
на A
. (Если у меня есть автоматически сгенерированный PK IDENTITY, значение обновляется непосредственно в сущности, но здесь это не так.)
Может ли em.flush()
причинить вред при использовании в транзакции?