私はエンティティコール会社、もう1人のエンティティコールトークンを持っています。休止状態での汚れチェックの回避方法
1会社には多くのトークンがあります。
だから私の会社の実体に、私は次のようなものがあります:
@OneToMany(mappedBy = "companyId")
public Set<Token> getTokens() {
return tokens;
}
しかし、私はそれは、復帰前にフォローのようなその何かをトークンのリストを変更し、復帰時にいくつかのロジックを持っています。
を@OneToMany(mappedBy = "companyId")
public Set<Token> getTokens() {
tokens.remove(token);
return tokens;
}
私はトークンリストの値を変更するので、hibernateを使用してdbから会社オブジェクトを選択するたびに、会社テーブルが自動的に更新されます。
私が理解している限り、これは休止状態の汚れチェックの動作です。だから、Hibernateが何か変わったことを検出すると、データベースへの更新を行います。
これを回避できる方法はありますか?たとえば、単にhibernate関数を呼び出すだけで、hibernateはトークンリストが汚れていることを知り、更新を行いません。
はい、getTokens()のフィルタリングロジックは適切ではありません。右のフィルタリングロジックはエンティティレベルでは適用されません。しかし、現在、この方法を使用する場所が多いため、このエンティティレベルで変更すると、他の場所に影響を与えます。また、他の場所を変更した場合は、再度アプリケーション全体を再テストする必要があります。
このように私はこれについてより良い方法を見つけようとしています。
元のデータのコピーを作成し、コピーされたデータであなたのロジックを実行して、コピーしたデータを返す:
はたぶん実装下記のに役立ちます。 –