Joh*_* F. 28 java google-app-engine jpa transactions
我最近开始在Google App Engine上使用JPA.在阅读一些例子时,我注意到对象持久化的方式存在一些变化.在一个案例中,我看到过这样的事情:
entityManager.getTransaction().begin();
entityManager.persist(object);
entityManager.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)
在其他情况下,我没有看到使用getTransaction().我只看到entityManager.persist(object).什么时候适合使用getTransaction()?
Pio*_*cki 19
如果您使用容器管理,EntityManager那么您正在使用JTA事务.因此,您不需要(更准确地说 - 您不能)干扰使用EntityManager的提取事务entityManager.getTransaction().JTA启动并提交您的交易.
如果您使用托管应用程序EntityManager并且您不想参与JTA事务,那么您需要自己管理它们(它称为资源本地实体管理器).
最典型的是,在Java SE环境中使用EntityManager与之配合EntityManager.getTransaction()使用的应用程序.
编辑:您可能对从JPA 2.0规范中的secion 7.5控制事务感兴趣.
在GAE中没有Java EE/JTA,因此忽略诸如bean管理事务(BMT)和容器管理事务(CMT)之类的术语.
您的工作要么是事务性的(您希望多个对象一次转到数据存储区,要么全部失败 - 这是您使用getTransaction()的地方),或者是非事务性的(其中所有内容都是逐个转到数据存储区,并且一个持久化失败不会影响其他人 - 这就是你只需要调用persist()/ merge()/ remove())的地方.
| 归档时间: |
|
| 查看次数: |
28711 次 |
| 最近记录: |