Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “一对多关系孩子扔”;一个或多个实例无法持久化;_Java_Google App Engine_Persistence_Jdo - Fatal编程技术网

Java “一对多关系孩子扔”;一个或多个实例无法持久化;

Java “一对多关系孩子扔”;一个或多个实例无法持久化;,java,google-app-engine,persistence,jdo,Java,Google App Engine,Persistence,Jdo,我有两个类,每个类都是持久性的-一个事件类和一个分数类。 事件类包含分数的数组列表 我有一个方法,可以建立一个事件列表,然后尝试使用 PersistenceManager pm=PMF.get().getPersistenceManager(); 试一试{ makePersistentAll(Event.getEvents()); }最后{ pm.close(); } 所有事件都保存到数据存储中(我可以在/_ah/admin上看到它们)。 然而,分数并不能保存(至少大多数分数不能保存) 第一

我有两个类,每个类都是持久性的-一个事件类和一个分数类。 事件类包含分数的数组列表

我有一个方法,可以建立一个事件列表,然后尝试使用

PersistenceManager pm=PMF.get().getPersistenceManager();
试一试{
makePersistentAll(Event.getEvents());
}最后{
pm.close();
}
所有事件都保存到数据存储中(我可以在/_ah/admin上看到它们)。 然而,分数并不能保存(至少大多数分数不能保存)

第一个事件的所有分数保存,但另一个事件的分数不保存。 所有事件都有分数,并且在尝试保存到数据存储之前填充列表

我对
makePersistentAll()
的调用也引发了
javax.jdo.JDOUserException:一个或多个实例无法持久化

最后,我可以在datastore admin中看到,虽然所有事件都被保存,但它们的分数值是一组(~15)空值的列表。所有其他值都是正确的。 这些键也是唯一的(尽管我正在手动生成这些键)

你知道哪里出了问题吗

活动:

@PersistenceCapable(detaccable=“true”)
公开课活动{
@不持久
受保护的静态ArrayList事件=新建ArrayList();
@主键
@持久的
私钥;
@持久的
私有字符串名称;
@持久的
私有字符串日期;
@持久的
私人弦年;
@持久的
私有字符串scoresUrl;
@持久的
私人ArrayList分数;
分数:

@PersistenceCapable(detaccable=“true”)
公开课成绩{
@主键
@持久的
私钥;
@持久的
私钥事件密钥;
@持久的
私有字符串单元名;
@持久的
私人场所;
@持久的
私人浮动分数;
在logging.properties中设置
.level=FINEST
后,我看到三个条目,我认为这些条目可能是在保存所有事件之后导致问题的。看起来好像在
makePersistentAll()
开始处理Score对象之前,连接已经关闭

2012年8月17日下午2:15:42 org.datanucleus.store.connection.ConnectionManagerImpl closeAllConnections
精细:在池中找到连接:com.google.appengine.datanucleus.datastoreconnectionfactorympl$DatastoreManagedConnection@77a477b7对于key=org.datanucleus。ObjectManagerImpl@45e4d960in-factory=ConnectionFactory:nontx[com.google.appengine.datanucleus。DatastoreConnectionFactoryImpl@4eafccbe]但是所有者对象正在关闭,所以正在关闭连接
2012年8月17日下午2:15:42 org.datanucleus.store.connection.ConnectionManagerImpl$1 managedConnectionPostClose
精细:已从池中删除连接:com.google.appengine.datanucleus.datastoreconnectionfactorympl$DatastoreManagedConnection@77a477b7对于key=org.datanucleus。ObjectManagerImpl@45e4d960in-factory=ConnectionFactory:nontx[com.google.appengine.datanucleus。DatastoreConnectionFactoryImpl@4eafccbe]
2012年8月17日下午2:15:42 com.google.apphosting.utils.jetty.JettyLogger警告
警告:/分数
javax.jdo.JDOUserException:一个或多个实例无法持久化

根据Shivan Dragon的建议,我从使用PersistenceManager转向在事务中处理所有事务

它看起来不那么整洁(因为我需要显式地设置每个属性),但它现在可以按预期工作,不再抛出异常


我对这种额外的混乱完全没有意见,因为这种方法还可以让我更好地控制何时将单个实体的数据保存到数据存储中。

根据Shivan Dragon的建议,我从使用PersistenceManager改为在事务中执行所有操作

它看起来不那么整洁(因为我需要显式地设置每个属性),但它现在可以按预期工作,不再抛出异常


我对额外的杂乱无章毫无异议,因为这种方法还可以让我更好地控制何时将单个实体的数据保存到数据存储中。

因为我遇到了与我找到的解决方法相同的问题

我使用PersistenceManager查找了所有要删除的持久化对象。之后,我尝试只删除第一个对象。例如:

PersistenceManager pm = ...
List<MyEntity> myEntityList = pm.newQuery(MyEntity.class).executeList();
pm.deletePersistent(myEntityList.get(0));// Pretend that myEntityList has at least one object.
PersistenceManager pm=。。。
List myEntityList=pm.newQuery(MyEntity.class).executeList();
pm.deletePersistent(myEntityList.get(0));//假设myEntityList至少有一个对象。

这样,您将得到另一个错误,它将告诉您这就是问题所在。从第二个错误中,我了解到我需要删除外键上的NOTNULL约束。或者从这一点开始,您应该看到MySql错误,而不是更多的JDO错误。

因为我遇到了与我用这种方法发现的问题相同的问题解决它的方法

我使用PersistenceManager查找了所有要删除的持久化对象。之后,我尝试只删除第一个对象。例如:

PersistenceManager pm = ...
List<MyEntity> myEntityList = pm.newQuery(MyEntity.class).executeList();
pm.deletePersistent(myEntityList.get(0));// Pretend that myEntityList has at least one object.
PersistenceManager pm=。。。
List myEntityList=pm.newQuery(MyEntity.class).executeList();
pm.deletePersistent(myEntityList.get(0));//假设myEntityList至少有一个对象。

这样,您将得到另一个错误,它将告诉您这就是问题所在。从第二个错误中,我了解到我需要删除外键上的NOTNULL约束。或者从这一点开始,您应该看到MySql错误,而不是更多的JDO错误。

这听起来可能是一个愚蠢的评论,但您是否尝试过这样做事务内部是否存在(即启动事务、持久化所有内容、提交事务)?不,我没有。Fr