Я собирал информацию о методе flush(), но я не совсем понимаю, когда его использовать и как правильно его использовать. Из того, что я читал, я понимаю, что содержимое контекста персистентности будет синхронизировано с базой данных, т.е. е. выдача невыполненных заявлений или обновление данных объекта.Правильное использование flush() в JPA/Hibernate
Теперь у меня есть следующий сценарий с двумя объектами A
и B
(в отношениях «один к одному», но не применяемый или смоделированный JPA). A
имеет составной ПК, который установлен вручную, а также имеет автоматически генерируемое поле IDENTITY recordId
. Этот recordId
должен быть записан объекту B
в качестве внешнего ключа к A
. Я сохраняю A
и B
за одну транзакцию. Проблема заключается в том, что автоматически генерируемое значение A.recordId
недоступно в транзакции, если я не сделаю явный вызов em.flush()
после звонка em.persist()
по телефону A
. (Если у меня есть автогенерированный идентификатор PK, тогда значение напрямую обновляется в объекте, но здесь это не так.)
Может ли em.flush()
причинить какой-либо вред при его использовании в рамках транзакции?
Что он сказал. em.flush() поведение эха java.io.Flushable.flush(), где все буферизованные данные отправляются в любой пункт назначения. – Erik 2010-11-25 10:29:42