我有两个课程,每个课程都是 PersistentCapable——一个 Event 和一个 Score 课程。Event 类包含一个分数的 ArrayList。
我有一个建立事件列表的方法,然后尝试使用将事件及其相应的分数保存到数据存储区
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistentAll(Event.getEvents());
} finally {
pm.close();
}
事件全部保存到数据存储区(我可以在 /_ah/admin 中看到它们)。然而,分数不会保存(至少大多数不会保存)。
从第一个事件保存的所有分数,但没有其他事件的分数。所有事件都有分数,并且在尝试保存到数据存储之前填充列表。
我的电话makePersistentAll()
也正在抛出javax.jdo.JDOUserException: One or more instances could not be made persistent
最后,我可以在数据存储区管理员中看到,虽然所有事件都被保存了,但它们的得分值是一堆 (~15) 空值的列表。所有其他值都是正确的。键也是唯一的(尽管我是手动生成的)。
关于出了什么问题的任何想法?
事件:
@PersistenceCapable(detachable="true")
public class Event {
@NotPersistent
protected static ArrayList<Event> events = new ArrayList<Event>();
@PrimaryKey
@Persistent
private Key key;
@Persistent
private String name;
@Persistent
private String date;
@Persistent
private String year;
@Persistent
private String scoresUrl;
@Persistent
private ArrayList<Score> scores;
分数:
@PersistenceCapable(detachable="true")
public class Score {
@PrimaryKey
@Persistent
private Key key;
@Persistent
private Key eventKey;
@Persistent
private String unitName;
@Persistent
private int place;
@Persistent
private float score;
在 logging.properties 中设置.level = FINEST
后,我看到三个条目,我认为这三个条目可能会在所有事件都保存后导致问题。看起来好像连接在makePersistentAll()
到达 Score 对象之前就被关闭了。
Aug 17, 2012 2:15:42 PM org.datanucleus.store.connection.ConnectionManagerImpl closeAllConnections
FINE: Connection found in the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@77a477b7 for key=org.datanucleus.ObjectManagerImpl@45e4d960 in factory=ConnectionFactory:nontx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@4eafccbe] but owner object closing so closing connection
Aug 17, 2012 2:15:42 PM org.datanucleus.store.connection.ConnectionManagerImpl$1 managedConnectionPostClose
FINE: Connection removed from the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@77a477b7 for key=org.datanucleus.ObjectManagerImpl@45e4d960 in factory=ConnectionFactory:nontx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@4eafccbe]
Aug 17, 2012 2:15:42 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /scores
javax.jdo.JDOUserException: One or more instances could not be made persistent