2014-09-20 1 views
0

Я пытаюсь удалить коллекцию объектов, но почему-то они все еще остаются.Удаленная коллекция все еще существует

List<Assignment> assignments = shift.getAssignments(); 
shift.getObjectContext().deleteObjects(assignments); 
shift.getObjectContext().commitChanges(); 

После CommitChanges выполненного, единственное назначение в коллекции имеет следующее значение:

[{<ObjectId:Assignment, assignment_id=26067>; committed; // snipped for clarity 

Я подумал, что после того, как DeleteObject(), состояние будет УДАЛИТЬ; и после commitChanges() он не должен оставаться в коллекции. В соответствии с этим: http://cayenne.apache.org/docs/3.0/persistent-object-lifecycle.html.

Что мне не хватает?

EDIT: изменил код, чтобы удалить другой объект данных, который, в свою очередь, распространяет изменения в назначениях.

+0

См. Ответ ниже о правилах удаления. То, что подозревается в вашем примере, хотя и является «зафиксированным» состоянием назначения после удаления и фиксации. Это должно быть «преходящим». Похоже, что объекты не удаляются в том месте, где вы печатаете это утверждение. Здесь недостаточно информации, чтобы угадать, почему. Вы также видите инструкции DELETE SQL в журналах (в частности, для ID 26067), и выполняются ли они до или после распечатки состояния Assigmnent? –

+0

Да, я не уверен, что происходит с этим «совершенным» состоянием. Я не могу воссоздать ту же проблему сейчас. Но я думаю, что часть проблемы заключается в том, что были созданы обратные вызовы, не зная. Я нашел его, когда посмотрел в журнал. – Tuan

ответ

1

Если вы хотите, чтобы объекты, которые будут удалены из коллекции на удаление вы можете сделать одну из двух вещей:

  • вручную удалить их итерация копию коллекции и вызов «removeFromAssignments()»
  • Определите правило удаления NULLIFY для присваивания -> отношение сдвига