Как эффективно объединить отношения @OneToMany? - PullRequest
0 голосов
/ 02 сентября 2011

Например, у меня есть следующие два класса сущностей с отношением один ко многим:

public class A implements Serializable {
    ...
    @OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
    private List<B> bs;
    ...
}

public class B implements Serializable {
    ...
    @ManyToOne
    private A a;
    ...
}

Предположим, у меня есть экземпляр A с именем a и a.bs == [b1, b2, b3]. Теперь я хочу удалить b1 из и добавить b4 в отношение, чтобы a.bs == [b2, b3, b4] и b1.a == null.

Я попробовал em.merge(a) после выполнения a.setBs(b2, b3, b4), но это приведет к a.bs == [b1, b2, b3, b4], если я не сделаю явное b1.setA(null). Однако это может привести к усложнению, если a.bs сильно изменится, и если A имеет больше связей «один ко многим» с другими классами сущностей. Установка orphanRemoval = true также не является решением, потому что я просто хочу установить b1.a = null вместо удаления b1.

Эта проблема уже давно ставит меня в тупик, и всем, кто мне помогает, очень признателен!

1 Ответ

0 голосов
/ 02 сентября 2011

вы можете установить каскадный стиль для обновления на bs и сказать a.bs.remove(b1); session.update(a);

, что бы сработало.

вы говорите ORM каскадно обновлять коллекцию, когдаПри удалении записи из коллекции соответствующее значение будет аннулировано.

...