0

我正在使用帶有JDO的GAE數據存儲來保存課程信息。每個課程都有一個GradeDefinition對象列表(例如「A = 90%+」,「B = 80%+」等)makePersistent將元素附加到我的列表中,而不是替換列表

當我嘗試更改列表時,新元素僅附加在舊元素後面。我懷疑我使用可分離對象和持久性管理器的方式存在問題。

一個基本的破敗:

@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對象列表,我:

  1. 獲取過程對象(自動獲取其GradingPolicy,它會自動提取它的GradeDefinition對象列表),
  2. 準備我的新成員列表GradeDefinitions與

    List<GradeDefinition> newDefinitions = new ArrayList<GradeDefinitions>(); newDefinitions.add(new GradeDefinition("X")); //for example newDefinitions.add(new GradeDefinition("Y"));

  3. 通過調用course.getGradingPolicy.setGradeDefinitions(newDefinitions);

  4. 重置列表通過調用persistenceManager.makePersistent(course);

堅持的變化,但如果分級政策原本有A,B,和C,它現在持有A,B,C,X和Y!

我需要做些什麼來清除列表?我是否需要手動刪除舊的GradeDefinitions?

+0

這確實是一個可拆卸實體和多個持久性管理器的問題。我通過在單個持久性管理器的生命週期內完成所有數據操作來解決這個問題。 – 2010-10-28 18:31:38

回答

1

注意多個PersistanceManagers之間的不一致性,或者更好的是,一次只能有一個PersistanceManager浮動。