我最近开始在 Google App Engine 上使用 JPA。在阅读一些示例时,我注意到对象的持久化方式存在一些变化。在一种情况下,我见过这样的事情:
entityManager.getTransaction().begin();
entityManager.persist(object);
entityManager.getTransaction().commit();
在其他情况下,我看不到 getTransaction()
的使用。我只是看到 entityManager.persist(object)
。什么时候适合使用 getTransaction()
?
最佳答案
如果您使用容器管理的 EntityManager
,那么您使用的是 JTA 事务。因此,您不需要(更准确地说 - 您不能)干扰使用 entityManager.getTransaction()
获取的 EntityManager
事务。 JTA 启动并提交您的事务。
如果您使用应用程序管理的 EntityManager
并且您不想参与 JTA 事务,那么您需要自己管理它们(称为资源本地实体管理器)。
大多数情况下,与 EntityManager.getTransaction()
一起使用的应用程序管理的 EntityManager
用于 Java SE 环境。
编辑:您可能对 JPA 2.0 specification 中的 7.5 控制交易 部分感兴趣.
关于java - JPA - 持久化对象时何时使用 getTransaction(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464370/