java - JPA - 持久化对象时何时使用 getTransaction()

标签 java google-app-engine jpa transactions

我最近开始在 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/

相关文章:

java - SQL JPA - 多列作为主键

java - 以编程方式忽略(省略)REST 服务的 JSON 响应中的特定字段,而不更改 DTO 对象类

java - 如何用 Java 制作 soap 客户端?

java - 使用 Maven 继承和构建

java - 密码 block 链接 : XOR implementation in Java

python - Google App Engine for Python 中的引用文献列表

java - 在 Java GAE 中删除具有特定属性集的实体时遇到问题

java - 如何在 spring 数据 jpa 规范中将枚举作为字符串处理

java - 跨多个线程使用同一个EntityManager

python - HttpError : <HttpError 400 when requesting https://www. googleapis.com/bigquery/v2/projects/