2009-05-13 20 views
3

hereと記載されているように、双方向の多対多関係を介して関連する一対のHibernateエンティティAとBがあります。各エンティティの主キーを含むリンクテーブルを有する、他のタイプのエンティティのコレクションを参照する鞄。Hibernate L2キャッシングと多対多の関係

私はまた、このように、コレクションの値をキャッシュするためにHibernate L2キャッシュを使用しています:

<bag name="xyz" table="XYZ" ...> 
    <cache usage="nonstrict-read-write"/> 
</bag> 

私が発見しています問題は、私は1つの側からの関係、上のアイテムのキャッシュされたコレクションを更新するときにということです反対側は更新されません。

例えば:

A a = session.get(1L, A.class); 

B b = a.getBs().get(0); 
Long bId = b.getId(); 

a.getBs().remove(0) // delete the B from A 
// ... flush and commit the transaction... 

B b2 = session.get(bId, B.class); 
Collection<A> as = b2.getAs(); 

コレクションとして、まだデータベースの状態は関係が削除されたという事実を反映しているにもかかわらず、への参照が含まれています。キャッシュを無効にした後、Hibernateは正しい結果を返します。

hibernateには、関連するエンティティのキ​​ャッシュ無効化を処理するためのメカニズムがありますか、または両方の関係から関係を削除する必要がありますか?

私はHibernate 3.2.6を使用しています。

答えて

1

定義上、両側から削除する必要があります。基本的に両方のコレクションが独立してキャッシュされるので、 から技術的な視点が得られます。

もちろん、実用的な観点からはナンセンスであり、 多くの人がそれを越える予定です。