Проблема обновления коллекции с использованием JPA - PullRequest
0 голосов
/ 12 марта 2010

У меня есть класс сущности Foo foo, который содержит Collection<Bar> bars. Я пробовал разные способы, но не могу успешно обновить свою коллекцию.

Одна попытка:

foo = em.find(key);
foo.getBars().clear();
foo.setBars(bars);
em.flush;  \\ commit, etc.

Добавляет новую коллекцию к старой.

Еще одна попытка:

foo = em.find(key);
bars = foo.getBars();
for (Bar bar : bars) {
    em.remove(bar);
}
em.flush;  

В этот момент я подумал, что смогу добавить новую коллекцию, но обнаружил, что сущность foo уничтожена.

Вот некоторые аннотации. В Фу:

@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "foo")
private List<Bar> bars;

В баре:

@ManyToOne(optional = false, cascade = { CascadeType.ALL })
@JoinColumn(name = "FOO_ID")
private Foo foo;

Кто-нибудь еще имел проблемы с этим? Есть идеи?

1 Ответ

2 голосов
/ 12 марта 2010

Второй подход будет работать, если вы удалите CascadeType.ALL из private Foo foo и вызовете foo.getBars().clear() после удаления Bar s.

В настоящее время, когда вы удаляете Bar s во втором подходе, удаление распространяется на соответствующую Foo сущность, потому что CascadeType.ALL включает CascadeType.REMOVE.

...