1

以下のコードを実行しようとしていますが、「削除されたエンティティをマージできません」というエラーが表示され続けます。

私のDBテーブルは次のようになります。

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> bpssへの参照がまだ含まれていますBannerPeriod。したがって、ここでマージを呼び出すと、次のようになります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 に答える