класса javax.торговая операция.Транзакций против орг.springframework.торговая операция.аннотация.Деловой



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



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



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

718   3  

3 ответов:

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

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

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

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

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

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

  • org.springframework.торговая операция.аннотация.Транзакционный всегда учитывается
  • javax.торговая операция.Транзакционный учитывается ТОЛЬКО при наличии транзакций EJB3. Наличие транзакций EJB3 осуществляется путем проверки, если класс javax.ejb.TransactionAttribute доступно в classpath (от версии 2.5.3 до 3.2.5). Таким образом, вы можете в конечном итоге с аннотации не принимаются во внимание, если только javax.transaction.Transactional находится в вашем classpath и не 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.торговая операция.Деловой.

это всегда использовать, @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]

Comments

    Ничего не найдено.