В заголовке говорится все это: Каково различие между a UserTransaction
и EntityTransaction
?
Мое элементарное понимание - это UserTransaction
используется, когда JTA требуется (например, сделать запросы на mulitple вещах), и это EntityTransaction
используется, когда JPA только требуется (например, когда запрос является атомарным).
Это - единственная разница между двумя или там больше к ней, чем это?
Насколько я понимаю, UserTransaction используется, когда JTA требуется (например, чтобы делать запросы на несколько вещей), и что EntityTransaction используется, когда JPA требуется только (например, когда запрос атомарно).
Это в основном верно, но ваше описание «множественных вещей» и «атомарности» немного странно. JTA позволяет разработчику использовать распределенную транзакцию для внесения изменений в несколько ресурсов (база данных, брокер JMS и т. Д.) Атомарно (все или ничего). Если осуществляется доступ только к одному ресурсу (например, к одной базе данных), вам не нужен JTA, но транзакция по-прежнему является атомарной (все или ничего). Это, например, случай, когда вы используете обычную транзакцию JDBC в одной базе данных.
Учитывая UserTransaction
по сравнению с EntityTransaction
:
EntityTransaction
, чтобы самостоятельно разграничить транзакцию. UserTransaction
. EntityManager
подключается к диспетчеру распределенных транзакций JTA. Единственная тонкость, о которой я знаю, касается слива изменений. Когда используется EntityTransaction
, JPA знает, что ему необходимо очистить изменения. Если транзакция управляется с помощью UserTransaction
, ей необходимо зарегистрировать обратный вызов с помощью JTA registerSynchronization
, чтобы изменения были сброшены в базу данных до завершения транзакции.Если вы используете EJB с CMT (транзакция, управляемая контейнером), вам даже не нужно использовать UserTransaction
: сервер приложений запускает и останавливает транзакции за вас. Связанные вопросы: