我正在使用带有JDO的GAE数据存储来保存课程信息。每个课程都有一个GradeDefinition对象列表(例如“A = 90%+”,“B = 80%+”等)
当我尝试更改List时,新元素只是简单地附加在旧元素后面。我怀疑我使用可拆卸对象和持久性管理器的方式存在问题。
基本纲要:
@PersistenceCapable(detachable = "true")
public class Course
{
@Persistent(defaultFetchGroup = "true")
private GradingPolicy gradingPolicy;
}
@PersistenceCapable(detachable = "true")
public class GradingPolicy
{
@Persistent(defaultFetchGroup = "true")
private List<GradeDefinition> gradeDefinitions;
}
@PersistenceCapable(detachable = "true")
public class GradeDefinition
{
@Persistent
private String gradeName; //e.g. "A", "B", etc.
}
然后,当我想更新课程中的GradeDefinition对象列表时,我:
使用
准备我的新GradeDefinition列表 List<GradeDefinition> newDefinitions = new ArrayList<GradeDefinitions>();
newDefinitions.add(new GradeDefinition("X")); //for example
newDefinitions.add(new GradeDefinition("Y"));
通过调用course.getGradingPolicy.setGradeDefinitions(newDefinitions);
persistenceManager.makePersistent(course);
但是,如果评分政策最初包含A,B和C,它现在可以保存A,B,C,X和Y!
清除列表需要做些什么吗?我是否需要手动删除旧的GradeDefinitions?
答案 0 :(得分:1)
注意多个PersistanceManagers之间的不一致,或者更好的是,一次只有一个PersistanceManager浮动。