独立JPA和entityManager

时间:2015-02-02 09:54:07

标签: spring jpa transactions jta

我发现这样:

  • 1"如果JPA是独立使用的,您可以使用EntityTransaction自行划分事务。"
  • 2"如果JPA在与JTA集成的托管环境中使用,则使用UserTransaction"

我的问题是:

  • 1 JPA单独使用是什么意思(这意味着没有像Java EE或Spring这样的容器这样的管理环境)?
  • 2什么是交易划分?
  • 3 Spring可以负责管理JPA(Spring也是一个容器,所以我们可以认为Spring是一个托管环境)吗?

1 个答案:

答案 0 :(得分:1)

数目:

  1. Standalone意味着更多的东西,比如:你自己创建的EntityManager实例(相对于它们没有被注入),你自己开始并提交交易,你负责传播交易(哪个代码(例如不同服务的代码)在哪个事务中执行。

  2. 事务划分是您启动,传播和结束事务的方式。如果您使用托管环境(使用JTA),那么您可以以某种方式注释服务方法,并控制不同服务调用之间“事务传播”的方式。说:只有注释,您可以决定在调用PersService.addPerson(Person person)时自动开始事务T1,并且在AddressService.saveAddress(Address address)中执行的代码(从addPerson()调用)在同一事务T1中执行(或者如果你想,一个新的交易T2)。此外,对于JTA,不同的数据库可以在同一事务中工作。

  3. 是的,Spring可以并且几乎总是被配置为作为托管环境工作。但它也可以配置为在独立模式下工作。其他已知的托管环境是Java EE环境(像WildFly或Glassfish这样的应用程序服务器)。