上記のエラー「org.hibernate.ObjectDeletedException: 削除されたオブジェクトがカスケードによって再保存されます (関連から削除されたオブジェクトを削除します):」が表示されます。何が問題で、何が修正されるべきか誰かが私を助けることができますか?
ありがとう。
上記のエラー「org.hibernate.ObjectDeletedException: 削除されたオブジェクトがカスケードによって再保存されます (関連から削除されたオブジェクトを削除します):」が表示されます。何が問題で、何が修正されるべきか誰かが私を助けることができますか?
ありがとう。
終了コードをマッピングしないと少し難しいです...これは通常、コレクションに関連付けられているオブジェクトを削除するために発生します。
所有しているコレクションからオブジェクトを削除し、その後オブジェクトを削除する必要があります
parentObject.collection.remove(objToDelete);
session.delete(objToDelete);
session.save(parentObject);
ただし、この方法でマップされたコレクションに deleteOrphan を使用してこれを回避できます
class ParentObject {
@OneToMany(orphanRemoval=true)
private List<ChildObject> collection;
}
コードは次のようになります
parentObject.collection.remove(objToDelete);
session.save(parentObject);
parentObject を保存するときに Hibernate によって自動的に削除されるため、オブジェクトを削除する必要はもうありません。
希望は助けになる
セッションでエンティティ (A) を削除しましたが、別のエンティティによって参照されており、カスケード アノテーションが付けられています。その参照により、エンティティ (A) がすぐに再作成されます。これはおそらく意図したものではないため、hibernate は文句を言います。
解決策は、エンティティに到達できるすべての参照 (コレクションを含む) を見つけてnull
、コレクションからエンティティを /remove に設定することです。
削除ロジックを好転させることができます。参照 (1 つしかない場合) を削除オーファンにし、@bellabax の説明に従って削除します。
この例外は、削除しているオブジェクトがエンティティのコレクションにもマップされていること、およびそのコレクション内のカスケードがすべてであることを示しています。したがって、任意の方法で削除したい場合は、カスケードを次のように変更できます
cascade = CascadeType.DETACH
これを XML 経由で (注釈ではなく) 実行している場合、以下は私にとって有効な解決策です。
一対多の関連付け:
注意: Hibernate が変更を確認する必要があるため、session.flush() は重要です。
セッションをフラッシュできない場合は、別のトランザクションで手順 (1、2) を実行してから、新しいトランザクションで手順 (4、5、6) を実行することをお勧めします。