Правильное использование flush () в JPA / Hibernate

Я собирал информацию о методе flush (), но я ' м не совсем понятно, когда его использовать и как правильно использовать. Из того, что я прочитал, я понимаю, что содержимое контекста постоянства будет синхронизировано с базой данных, то есть выдача невыполненных операторов или обновление данных объекта.

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

Может ли em.flush () причинить вред при его использовании внутри транзакция?

107
задан MicSim 26 November 2010 в 00:09
поделиться