Я предполагаю, что вы используете EclipseLink в приложении Java SE или в приложении Java EE, но с управляемым приложением EntityManager вместо управляемого контейнером EntityManager.
В обоих сценариях все обновления, сделанные в контексте постоянства, сбрасываются, только когда транзакция, связанная с фиксацией EntityManager (с использованием EntityTransaction.commit
), или когда сбрасывается контекст постоянства EntityManager (с использованием * 1006) *EntityManager.flush
). По этой причине второй фрагмент кода выдает INSERT, так как он вызывает методы EntityTransaction
begin
и commit
, а первый - нет; вызов em.persist
не выдает INSERT
.
Что касается FlushModeType
значений, документация API гласит следующее:
COMMIT
public static final FlushModeType COMMIT
Сброс происходит при фиксации транзакции. Поставщик может смывать на
в других случаях, но не обязательно.
AUTO
публичный статический финал FlushModeType AUTO
(по умолчанию) Сброс происходит при выполнении запроса.
Поскольку в первом случае запросы не выполнялись, сбрасывание не выполняется, т. Е. Операторы INSERT
, соответствующие постоянству сущности PhysicalCard
, не будут выдаваться. Это явная фиксация EntityTransaction
во втором, что приводит к выполнению оператора INSERT
.