makePersistent добавляет элементы в мой список вместо замены списка - PullRequest
0 голосов
/ 26 октября 2010

Я использую хранилище данных 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 вкурс, я:

  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?

1 Ответ

1 голос
/ 11 января 2011

Следите за несоответствиями между несколькими PersistanceManager, или, что еще лучше, используйте только один PersistanceManager, плавающий одновременно.

...