2017-10-24 8 views
1

私はhibernate 5を使用しています。ダーティチェックを無効にする方法や、格納されたスナップショットリストから手動で要素を削除する方法を知りたいのですが?私は例外を与えるオブジェクトをマージするとき は私が hibernateでダーティチェックを無効にする方法

class A{ 
.... 
@OneToMany 
private List<B> childs; 
... 
} 

はその後、私は、手動で

a.getChilds().remove(b) 

し、リストからオブジェクトを削除JPQLを使用してDBからの直接の子リストからオブジェクトを削除した

javax.persistence.EntityNotFoundException:Unable to find com.company.package.B with id 156983 

デバッグ後、storedSnapshotリストの中に削除されたオブジェクトbが見つかりました。

答えて

0

あなたのやりたいことはわかりません。私はあなたにいくつかのオプションを与えます。

あなたが特別にフラッシュしない限り、HibernateがDB内の何かを変更しないようにするには、FlushModeをmanualに変更します。あなたのコメントを読んだ後

entityManager.detach(myObject); 

EDIT

<property name="org.hibernate.flushMode" value="MANUAL"/> 

は、あなたのオブジェクトの変更がコミットされることを望まない場合は、単にそれをdisattachすることができます:あなたは、次の設定でそれを行うことができます:

あなたの問題は、このキャッシュされたデータを処理する戦略にある可能性が高いと思います。保存したくない情報でオブジェクトを変更しないことを強くお勧めします。

Hibernateのようなものを使用する一般的な考え方は、データベースの行を表すObjectを持つことです。

このキャッシュされた情報を別のオブジェクトに保存し、この情報をDBで確実に知っている場合にのみAを変更します。

+0

ありがとう、私は何が必要なのか質問を更新しました –

+0

@RaiedRaafatよろしくお願いします。私は私の答えを編集しました。それがあなたの問題を解決するなら、今私にしましょう。 – BrenoQ

+0

しかし、オブジェクト 'a'に他の値をキャッシュすると、オブジェクトbを取り除く際にマージする必要はなく、キャッシュされたデータを保持するためにエンティティaをリフレッシュする必要はありません。 –

関連する問題