Не удается очистить список связанных бинов сущности от бина сущности - PullRequest
1 голос
/ 10 октября 2011

Я пытаюсь запустить приведенный ниже код, но получаю сообщение об ошибке «Невозможно объединить удаленную сущность».

Мои таблицы БД выглядят так:

banner
-id

banner_period
-id
-banner_id
-date

Мой код Java:

Banner b = getEntityManager().find(banner.getId());
List<BannerPeriod> bps = b.getBannerPeriodList();
for (BannerPeriod bp : bps) {
    getEntityManager().remove(bp);
}
// <-- removed code that adds periods here
b.setBannerPeriodList(bps);
getEntityManager().merge(b);

Я не могу понять логику во всем этом.Кто-нибудь может объяснить, что это, я здесь скучаю?Я уже пытался найти ответы, но мне сложно определить ключевые слова, которые дают мне релевантные результаты.

ОБНОВЛЕНИЕ:

Баннерная сущность:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "bannerId")
private List<BannerPeriod> bannerPeriodList;

BannerPeriod объект:

@JoinColumn(name = "banner_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private Banner bannerId;

1 Ответ

2 голосов
/ 11 октября 2011

List<BannerPeriod> bps все еще содержит ссылки на BannerPeriod s.Поэтому при вызове слияния на b происходит вот что.

merge on b
-> Cascade all on  bannerPeriodList
-> Iterate over bannerPeriodList and merge them
**ERROR** The values in bannerPeriodList have been removed.

Попробуйте это

bps.clear();
b.setBannerPeriodList(bps);
getEntityManager().merge(b);
...