класса javax.торговая операция.Транзакций против орг.springframework.торговая операция.аннотация.Деловой
Я не понимаю, в чем фактическая разница между аннотациями javax.transaction.Transactional и org.springframework.transaction.annotation.Transactional?
и org.springframework.transaction.annotation.Transactional расширение javax.transaction.Transactional или они имеют совершенно иной смысл? Когда следует использовать каждый из них? Весна @Transactinal в сервисном слое и javax в DAO?
Спасибо за ответ.
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