objectdb: обновить дочерний набор‹› родителя после удаления одного дочернего элемента не работает

В моем приложении у меня есть два объекта Person и Activity

@Entity
public class Person
{
  .
  .
  .
  @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,orphanRemoval=true)
  Set<Activity> a;

  // getters setters constructors
}

... а также...

@Entity
public class Activity
{
  .
  .
  .
  // getters setters constructors
}
  1. Во-первых, я создаю два объекта Activity
  2. Я добавляю объекты активности в объект Person
  3. Я сохраняю объект Person (два объекта активности сохраняются, все работает нормально)
  4. Затем я удаляю один объект Activity из своей базы данных.
  5. Я выбираю свой объект Person из базы данных

Результатом является объект Person с Set<Activity> с size=2.

Может кто-то мне помочь, пожалуйста?


person user3543087    schedule 09.07.2014    source источник


Ответы (1)


Когда вы удаляете объект Activity из базы данных, вы должны обновить набор в Person и удалить этот объект Activity также из набора. В противном случае у вас будет неработающая ссылка на несуществующий объект Activity в наборе.

С другой стороны, поскольку вы включили orphanRemoval, вы можете просто удалить Активность задается в Person и она должна автоматически удаляться также из базы данных.

Другой вариант — определить набор как mappedBy, после чего набор будет обновляется автоматически, когда действие удаляется из базы данных, когда объект Person снова загружается из базы данных или обновляется.

person ObjectDB    schedule 11.07.2014
comment
но как добавить mappedBy с моей однонаправленной ассоциацией. потому что set‹Person› в классе Activity мне не нужен. - person user3543087; 13.07.2014
comment
Вам нужно будет добавить ссылку из Activity в Person. - person ObjectDB; 13.07.2014