独立 JPA 和 entityManager
Stand-alone JPA and entityManager
我发现了这样的东西:
- 1 "If JPA is use stand-alone, you use EntityTransaction to demarcate the transaction yourself."
- 2 "If JPA is used within a managed environment where it integrates with JTA, you use UserTransaction"
我的问题是:
- 1 独立使用 JPA 是什么意思(这意味着没有管理环境,如 Java EE 或 Spring 等容器)?
- 2 什么是事务划分?
- 3 spring 可以负责管理 JPA(Spring 也是一个容器所以我们可以认为 Spring 是一个托管环境)吗?
答案:
独立意味着更多的东西,比如:你通过自己的 EntityManager
实例创建(相对于它们没有注入),你自己开始并提交事务,你负责传播事务(在哪个事务中执行哪个代码(例如不同服务的代码))。
事务划分是您开始、传播和结束事务的方式。如果您使用托管环境(使用 JTA),那么您可以以某种方式注释服务方法并控制不同服务调用之间的 "transaction is propagated" 方式。说:仅使用注释,您可以决定在调用 PersService.addPerson(Person person)
时自动开始事务 T1,并且在 AddressService.saveAddress(Address address)
中执行的代码(从 addPerson()
调用)在同一事务 T1 中执行(或者,如果需要,新交易 T2)。同样使用 JTA,不同的数据库可以在同一个事务中工作。
- 是的,Spring 可以而且几乎总是配置为作为托管环境工作。但它也可以配置为在独立模式下工作。其他已知的托管环境是 Java EE 环境(应用程序服务器,如 WildFly 或 Glassfish)。
我发现了这样的东西:
- 1 "If JPA is use stand-alone, you use EntityTransaction to demarcate the transaction yourself."
- 2 "If JPA is used within a managed environment where it integrates with JTA, you use UserTransaction"
我的问题是:
- 1 独立使用 JPA 是什么意思(这意味着没有管理环境,如 Java EE 或 Spring 等容器)?
- 2 什么是事务划分?
- 3 spring 可以负责管理 JPA(Spring 也是一个容器所以我们可以认为 Spring 是一个托管环境)吗?
答案:
独立意味着更多的东西,比如:你通过自己的
EntityManager
实例创建(相对于它们没有注入),你自己开始并提交事务,你负责传播事务(在哪个事务中执行哪个代码(例如不同服务的代码))。事务划分是您开始、传播和结束事务的方式。如果您使用托管环境(使用 JTA),那么您可以以某种方式注释服务方法并控制不同服务调用之间的 "transaction is propagated" 方式。说:仅使用注释,您可以决定在调用
PersService.addPerson(Person person)
时自动开始事务 T1,并且在AddressService.saveAddress(Address address)
中执行的代码(从addPerson()
调用)在同一事务 T1 中执行(或者,如果需要,新交易 T2)。同样使用 JTA,不同的数据库可以在同一个事务中工作。- 是的,Spring 可以而且几乎总是配置为作为托管环境工作。但它也可以配置为在独立模式下工作。其他已知的托管环境是 Java EE 环境(应用程序服务器,如 WildFly 或 Glassfish)。