EntityManager.joinTransaction
предназначен для использования в транзакциях JTA (имеется в виду, что блок персистентности настроен на использование транзакций JTA), тогда как EntityTransaction.begin
предназначен для использования в качестве ресурса - локальные менеджеры сущностей (подразумевающие неиспользование JTA для управления транзакциями). Следовательно, они оба предназначены для использования в разных сценариях.
Первый случай, т. Е. EntityManager.joinTransaction
, используется редко, поскольку вам часто приходится внедрять управляемые контейнером EntityManager
экземпляры, когда вам нужна поддержка транзакций JTA. Управляемые контейнером EntityManager
вводятся (используя аннотацию @PersistenceContext
) в контекст существующей транзакции JTA (управляемой контейнером), и, следовательно, нет необходимости явно присоединяться к транзакции. Только в случае управляемых приложением EntityManager
s вам необходимо присоединиться к существующей транзакции. Управляемые приложения EntityManager
s не вводятся контейнером; вместо этого контейнер может внедрить только экземпляр EntityManagerFactory
(используя аннотацию @PersistenceUnit
), который используется приложением для получения экземпляра EntityManager
.
Во втором случае, т. Е. EntityTransaction.begin
, никакие транзакции JTA не будут использоваться для определения объема транзакции. Вместо этого транзакция является локальной в отношении ресурсов, так как любые изменения, внесенные в контекст постоянства, отслеживаются как элементарные единицы, пока не будет вызван EntityTransaction.commit
. В приложениях Java EE редко используются локальные менеджеры объектов, поскольку обычно требуется, чтобы EJB (и контейнер EJB) определяли границы транзакций, а не исходный код приложения. Кроме того, любая транзакционная работа, выполняемая с использованием локальной транзакции ресурса, не будет отслеживаться транзакцией JTA, которая, возможно, уже была инициирована, что приведет к неопределенному, запутанному и неоднозначному поведению транзакционных операций в вашем приложении.