Hibernate - cascade=”all-delete-orphan” のコレクションは、所有エンティティインスタンスによって参照されなくなりました 質問する

Hibernate - cascade=”all-delete-orphan” のコレクションは、所有エンティティインスタンスによって参照されなくなりました 質問する

エンティティを更新しようとすると、次の問題が発生します。

"A collection with cascade=”all-delete-orphan” was no longer referenced by the owning entity instance".

親エンティティがあり、そのSet<...>エンティティにはいくつかの子エンティティがあります。これを更新しようとすると、すべての参照がこのコレクションに設定され、設定されます。

次のコードはマッピングを表しています。

@OneToMany(mappedBy = "parentEntity", fetch = FetchType.EAGER)
@Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
public Set<ChildEntity> getChildren() {
    return this.children;
}

これに従って、Set<..> のみをクリーンアップしようとしました:問題を「可能な限り」解決する方法しかし、それは機能しませんでした。

何かアイデアがありましたら、お知らせください。

ありがとう!

ベストアンサー1

sonEntities に何かを割り当てている場所をすべて確認してください。参照したリンクでは、新しい HashSet を作成することが明確に示されていますが、セットを再割り当てするといつでもこのエラーが発生する可能性があります。例:

public void setChildren(Set<SonEntity> aSet)
{
    this.sonEntities = aSet; //This will override the set that Hibernate is tracking.
}

通常、コンストラクターでセットを「新規作成」するのは 1 回だけです。リストに何かを追加または削除するときは、新しいリストを割り当てるのではなく、リストの内容を変更する必要があります。

子供を追加するには:

public void addChild(SonEntity aSon)
{
    this.sonEntities.add(aSon);
}

子を削除するには:

public void removeChild(SonEntity aSon)
{
    this.sonEntities.remove(aSon);
}

おすすめ記事