1

我正在尝试运行下面的代码,但我不断收到错误“无法合并已删除的实体”。

我的数据库表如下所示:

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;
4

1 回答 1

2

List<BannerPeriod> bps仍然包含对BannerPeriods 的引用。所以当你在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);
于 2011-10-11T01:56:54.700 回答