javax.transaction.Transactional与org.springframework.transaction.annotation.Transactional实际的区别是什么

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我不明白注释javax.transaction.Transactional和实际的区别是什么org.springframework.transaction.annotation.Transactional

org.springframework.transaction.annotation.Transactional一个扩展javax.transaction.Transactional还是他们有完全不同的含义?什么时候应该每个人都使用?@Transactinal服务层中的Spring 和DAO中的javax

提问于
用户回答回答于

Spring已经定义了它自己的Transactional注释,以便在几年前使Spring bean方法成为事务性的。

除了EJB方法之外,Java EE 7终于完成了同样的事情,现在允许CDI bean方法成为事务性的。所以从Java EE 7开始,它也定义了自己的Transactional注解(显然它不能重用Spring的注解)。

在Java EE 7应用程序中,您将使用Java EE注释。

在Spring应用程序中,您将使用Spring注释。

它们的用法是相同的:通知容器(Java EE或Spring)方法是事务性的。

用户回答回答于

另一个区别是Spring如何处理@Transactional注释

  • org.springframework.transaction.annotation.Transactional总是被考虑在内
  • 仅当存在EJB3事务时才考虑javax.transaction.Transactional。EJB3事务的存在是通过检查类javax.ejb.TransactionAttribute路径中是否存在类(从版本2.5.3到3.2.5)来完成的。因此,如果只有javax.transaction.Transactional你的类路径中没有考虑你的注释,那么你最终可能不会考虑注释javax.ejb.TransactionAttribute。如果您使用Hibernate,可能会出现这种情况:hibernate-core(4.3.7.Final)取决于jboss-transaction-api_1.2_spec(1.0.0.Final),它没有提供javax.ejb.TransactionAttribute

扫码关注云+社区