【发布时间】:2013-10-25 01:10:56
【问题描述】:
在我更新 GWT 中的一些实体后,我想保存它们。但是,当我尝试保留它们时,当我查看 AppEngine 管理界面时它不会保存。布尔值没有改变。
代码
EntityManager em = EMF.get().createEntityManager();
for (OnixUser s: admin) {
log.info(s.email + ", " + s.isAdmin);
em.merge(s);
}
em.close();
交易更新
EntityManager em = EMF.get().createEntityManager();
em.getTransaction().begin();
for (OnixUser s: admin) {
log.info(s.email + ", " + s.isAdmin);
OnixUser merged = em.merge(s);
em.persist(merged);
// em.persist(s);
}
em.getTransaction().commit();
em.close();
仍然没有保存。没有抛出异常。
日志
Oct 16, 2013 3:19:10 PM com.example.sdm.server.SDMServiceImpl setAdmin
INFO: chloe@example.com, true
OnixUser 实体的 App Engine 管理界面
以 FINEST 级别登录
FINE: Created ManagedConnection using DatastoreService = com.google.appengine.api.datastore.DatastoreServiceImpl@2fd9270d
Oct 16, 2013 4:03:14 PM org.datanucleus.store.connection.ConnectionManagerImpl allocateConnection
FINE: Connection added to the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@31c1f89d for key=org.datanucleus.ObjectManagerImpl@6977c57b in factory=ConnectionFactory:tx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@2b1f5f6b]
Oct 16, 2013 4:03:14 PM com.example.sdm.server.SDMServiceImpl setAdmin
INFO: chloe@example.com, true
Oct 16, 2013 4:03:14 PM org.datanucleus.state.LifeCycleState changeState
FINE: Object "com.example.sdm.shared.OnixUser@48ef6e99" (id="com.example.sdm.shared.OnixUser:6456332278300672") has a lifecycle change : "P_CLEAN"->"P_NONTRANS"
Oct 16, 2013 4:03:14 PM org.datanucleus.store.connection.ConnectionManagerImpl$1 managedConnectionPostClose
FINE: Connection removed from the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@31c1f89d for key=org.datanucleus.ObjectManagerImpl@6977c57b in factory=ConnectionFactory:tx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@2b1f5f6b]
Oct 16, 2013 4:03:14 PM org.datanucleus.state.LifeCycleState changeState
FINE: Object "com.example.sdm.shared.OnixUser@48ef6e99" (id="com.example.sdm.shared.OnixUser:6456332278300672") has a lifecycle change : "P_NONTRANS"->"DETACHED_CLEAN"
Oct 16, 2013 4:03:14 PM com.google.apphosting.utils.jetty.AppEngineAuthentication$AppEngineUserRealm disassociate
FINE: Ignoring disassociate call for: chloe@example.com
【问题讨论】:
-
我没有使用过 GWT,但是您的代码没有使用 em.getTransaction().begin() 和 em.getTransaction().commit() 启动/提交事务。如果没有事务,实体管理器不会按照 JPA 规范对数据库进行任何更改。
-
@Shailendra 我认为这是可选的,但我添加了事务,通过管理界面查看或重新加载页面时仍然没有保存。
-
您不需要调用来持久化,因为“合并”指向的对象将被管理,并且任何进一步的更改都将在事务提交时自动持久化。您可以启用 sql 日志记录以查看该操作是否确实生成了任何 SQL。
-
@Shailendra 我尝试使用和不使用 .persist(),并在两者之间重新启动服务器。如何打开 SQL 日志记录?
-
您为 JPA 使用哪个持久性提供程序?
标签: java google-app-engine gwt jpa datanucleus