1 対多の関係としてマップされている個人所有のエンティティを Eclipselink で削除することができません。個人所有のエンティティを 1 対多のコレクションから削除し、その親への参照を NULL に設定して親を保存すると、個人所有のエンティティがデータベースから削除されません。しかし、それはオブジェクトから削除され、セッションの残りの部分では、個人所有の実体が実際に削除されたように見えます。
ここに1つのマッピングがあります
@OneToMany(mappedBy="parent", cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch=FetchType.EAGER)
@PrivateOwned // should prevent orhpans, but doesn't.
List<PrivatelyOwnedEntity> privatelyOwnedEntities;
私はカスケードをすべて追加しようとしましたが、@CascadeOnDelete、およびそれらのすべての組み合わせも追加しましたが、影響はないと思われますが、影響はありませんでした。
向こう側:
@ManyToOne
private Parent parent;
JoinColumn(nullable=false) を追加し、@ManyToOne アノテーションを削除して、これらのアノテーションの存在/削除のすべての組み合わせを試しました。変更による影響はありませんでした。
削除コード:
public boolean removePrivatelyOwnedEntity(int i) {
PrivatelyOwnedEntity privatelyOwnedEntityToBeRemoved = this.privatelyOwnedEntities.get(i);
//privatelyOwnedEntityToBeRemoved.setParent(null);
return this.privatelyOwnedEntities.remove(privatelyOwnedEntityToBeRemoved );
}
更新するコード:
projectManager.saveProject(project);
//so this privatelyOwnedEntity is deep within this object.
// Its project.site.siteMap.parents.privatelyOwnedEntities.
// SiteMap is embedded in Site.
// On save it calls a dao, and the dao's abstract class handles the update
// as shown below using Springs JpaTemplate
コードを保存:
public T save(T object) {
return getJpaTemplate().merge(object);
}