Я использую хранилище данных GAE с JDO для хранения информации о курсах. Каждый курс имеет список объектов GradeDefinition (например, «A=90%+», «B=80%+» и т. д.)
Когда я пытаюсь изменить список, новые элементы просто добавляются за старыми элементами. Я подозреваю, что проблема связана с тем, как я использую отделяемые объекты и менеджеры постоянства.
Основное изложение:
@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 в курсе, я:
- Получите объект курса (который автоматически получает свою GradingPolicy, которая автоматически получает список объектов GradeDefinition),
Подготовьте мой новый список GradeDefinitions с
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?