7

Hibernateを介してオブジェクトをロードし、それらのオブジェクトを分離オブジェクトとして別の層に渡すアプリケーションがあります。これらのオブジェクトへの変更はすべて、休止状態の層に送り返され、そこでsaveOrUpdate()オブジェクトを呼び出します。

saveOrUpdate()呼び出す前にコレクションから子オブジェクトを削除した場合、Hibernateは渡されるオブジェクトのコレクションに含まれる1対多の関係の子オブジェクトを削除しsaveOrUpdate()ますか?

そうでない場合、これは通常、分離オブジェクトを使用する休止状態のアプリケーションでどのように実行されますか?

4

2 に答える 2

5

saveOrUpdate()呼び出す前にコレクションから子オブジェクトを削除した場合、Hibernateは渡されるオブジェクトのコレクションに含まれる1対多の関係の子オブジェクトを削除しsaveOrUpdate()ますか?

いいえ、デフォルトではありません。このような子オブジェクトは、他のエンティティにもそれらへの参照がないことを前提として、このコンテキストでは「孤立」と呼ばれます。

これについては、ドキュメント11.11で説明されています。推移的な永続性

特別なカスケードスタイル、delete-orphanは、1対多の関連付けにのみdelete()適用され、関連付けから削除された子オブジェクトに操作を適用する必要があることを示します。注釈を使用すると、CascadeType.DELETE-ORPHAN同等のものはありません。代わりに、例11.4「<code>@OneToManywith」に示すように属性orphanRemovalを使用できますorphanRemovalエンティティがコレクションから削除された場合、または関連付けられたエンティティが関連付けから逆参照された場合、がtrueに設定されていれば、この関連付けられたエンティティに削除のマークを付けることができ@OneToMany@OneToOneorphanRemovalます。

于 2012-05-08T20:53:54.977 に答える
0

デフォルトでは、そうではありません。これを実現するには、@ Cascade(CascadeType.DELETE_ORPHANS)を使用できます。

于 2012-05-08T20:53:52.310 に答える