javax.transaction.Transactional vs org.springframework.transaction.annotation.Transactional

Я не понимаю, какова фактическая разница между аннотациями javax.transaction.Transactional и org.springframework.transaction.annotation.Transactional ?

Является ли org.springframework.transaction.annotation.Transactional расширением javax.transaction.Transactional или они имеют совершенно другое значение? Когда следует использовать каждый из них? Spring @Transactinal в слое обслуживания и javax в DAO?

Спасибо за ответ.

Spring определила свою собственную аннотацию Transactional, чтобы сделать методы Spring bean транзакционными, много лет назад.

Java EE 7, наконец, сделала то же самое и теперь позволяет методам CDI bean быть транзакционными, в дополнение к EJB-методам. Так как Java EE 7, он также определяет свою собственную аннотацию Transactional (она, очевидно, не может повторно использовать Spring).

В приложении Java EE 7 вы будете использовать аннотацию Java EE.

В приложении Spring вы будете использовать аннотацию Spring.

Их использование одинаково: информирование контейнера (Java EE или Spring) о том, что метод является транзакционным.

Еще одно отличие заключается в том, как Spring обрабатывает annotations @Transactional

  • org.springframework.transaction.annotation.Transactional всегда учитывается
  • javax.transaction.Transactional учитывается только при наличии транзакций EJB3. Присутствие транзакций EJB3 выполняется путем проверки javax.ejb.TransactionAttribute classа javax.ejb.TransactionAttribute в пути к classам (от версии 2.5.3 до 3.2.5). Таким образом, вы можете не учитывать ваши annotations, если только javax.transaction.Transactional находится в вашем пути к classам, а не javax.ejb.TransactionAttribute . Это может иметь место, если вы работаете с Hibernate: hibernate-core (4.3.7.Final) зависит от jboss-transaction-api_1.2_spec (1.0.0.Final), который не предоставляет javax.ejb.TransactionAttribute ,

Пожалуйста, будьте осторожны (эта проблема произошла в tomcat),

Если ваше приложение является веб-приложением SPRING, и вы используете механизм обработки транзакций Spring, который является @org.springframework.transaction.annotation.Transactional , то не смешивайте его с javax.transaction.Transactional.

Это всегда используется, @org.springframework.transaction.annotation.Transactional в весеннем приложении.

В противном случае мы можем получить эту ошибку,

 org.springframework.orm.jpa.JpaSystemException: commit failed; nested exception is org.hibernate.TransactionException: commit failed ........ Caused by: java.sql.SQLException: Protocol violation: [0] 
  • Использование транзакций или SaveChanges (false) и AcceptAllChanges ()?
  • Каков уровень изоляции транзакций по умолчанию для SQL Server с ADO.NET?
  • Что произойдет, если вы не совершаете транзакцию с базой данных (скажем, SQL Server)?
  • Как обойти отсутствие транзакций в MongoDB?
  • TransactionScope с файлами в C #
  • Каков «лучший» способ делать распределенные транзакции в нескольких базах данных с использованием Spring и Hibernate
  • Firebase runTransaction не работает - MutableData имеет значение null
  • TransactionScope автоматически переходит на MSDTC на некоторых машинах?
  • Операционная система Android
  • Понимание транзакций Spring. Что происходит, когда транзакционный метод вызывает другой транзакционный метод?
  • Django: как я могу защитить от одновременной модификации записей в базе данных
  • Давайте будем гением компьютера.