Разница между UserTransaction и EntityTransaction

название говорит все: в чем разница между UserTransaction и EntityTransaction?

мое рудиментарное понимание заключается в том, что UserTransaction используется, когда требуется JTA (например, для выполнения запросов на множество вещей), и это EntityTransaction используется, когда требуется только JPA (например, когда запрос является атомарным).

это единственная разница между ними или есть что-то еще?

1 ответов


мое рудиментарное понимание заключается в том, что UserTransaction используется, когда JTA требуется (например, для выполнения запросов множественные вещи), и что EntityTransaction используется, когда JPA требуется только (например, когда запрос является атомарным).

это в основном верно, но ваше описание "нескольких вещей" и "атомарных" немного странно. JTA позволяет разработчику использовать распределенную транзакцию для внесения изменений в кратные ресурсы (database, JMS broker, так далее.) атомарно (все-или-ничего). Если доступен только один ресурс (например, одна база данных), вам не нужен JTA, но транзакция по-прежнему атомарна (все или ничего). Это, например, случай, когда вы используете обычную транзакцию JDBC в одной базе данных.

учитывая UserTransaction и EntityTransaction:

  • если JPA используется автономно, вы используете EntityTransaction чтобы разграничить транзакцию самостоятельно.
  • если JPA используется в управляемой среде, где он интегрируется с JTA, вы используете UserTransaction. The EntityManager подключается к диспетчеру распределенных транзакций JTA. Единственная тонкость, о которой я знаю, учитывает приток изменений. Когда EntityTransaction используется, JPA знает, что ему нужно смыть изменения. Если транзакция контролируется с помощью UserTransaction, Он должен зарегистрировать обратный вызов с помощью JTA registerSynchronization, чтобы изменения были сброшены в базу данных до завершения транзакции. Если вы используете EJB с CMT (транзакция, управляемая контейнером), вам даже не нужно использовать UserTransaction: сервер приложений запускает и останавливает операции.

вопросы: