JPA EntityManager - когда начинается транзакция?

Меня смущает жизненный цикл транзакций, менеджеры сущностей и контекст персистентности в контейнере EJB.

Я использую EntityManager следующим образом:

 @PersistenceContext(unitName = "..")
 private EntityManager em;

в каждом лице без гражданства.

Мой вопрос так же прост, как:

  1. Когда начинается транзакция?
  2. Как распространяется транзакция? т.е. когда ejbs без состояния вызывают друг друга, они продолжают использовать одну и ту же транзакцию?
  3. Когда сделка совершается?

1 ответ

Решение

Для транзакций, управляемых контейнером:

  1. Транзакция (TX) начинается, когда вызывается первый транзакционный метод. По умолчанию все методы EJB являются транзакционными (эквивалентно TransactionAttributeType.REQUIRED, который является настройкой по умолчанию).

  2. Распространение TX по умолчанию сохраняет тот же TX для всех локальных вызовов EJB. Это эквивалентно явному TrasactionAttributeType.REQUIRED на всех вызванных методах

  3. Транзакция фиксируется, когда возвращается первый метод в цепочке вызовов (тот, для которого был создан TX).

Вы можете иметь детальный контроль над распространением TX, аннотируя ваши EJB-методы различными TransactionAttributeTypes.

Другие вопросы по тегам