1

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

1 に答える 1

1

オブジェクトの ID の親部分ですか?

親をnullに設定しないでください。私有オブジェクトに対してこれを行うべきではありません。コレクションから削除するだけです。

于 2011-11-15T19:36:56.623 に答える