JPA EntityManager - когда начинается транзакция?
Меня смущает жизненный цикл транзакций, менеджеры сущностей и контекст персистентности в контейнере EJB.
Я использую EntityManager следующим образом:
@PersistenceContext(unitName = "..")
private EntityManager em;
в каждом лице без гражданства.
Мой вопрос так же прост, как:
- Когда начинается транзакция?
- Как распространяется транзакция? т.е. когда ejbs без состояния вызывают друг друга, они продолжают использовать одну и ту же транзакцию?
- Когда сделка совершается?
1 ответ
Для транзакций, управляемых контейнером:
Транзакция (TX) начинается, когда вызывается первый транзакционный метод. По умолчанию все методы EJB являются транзакционными (эквивалентно
TransactionAttributeType.REQUIRED
, который является настройкой по умолчанию).Распространение TX по умолчанию сохраняет тот же TX для всех локальных вызовов EJB. Это эквивалентно явному
TrasactionAttributeType.REQUIRED
на всех вызванных методахТранзакция фиксируется, когда возвращается первый метод в цепочке вызовов (тот, для которого был создан TX).
Вы можете иметь детальный контроль над распространением TX, аннотируя ваши EJB-методы различными TransactionAttributeTypes.