私は以下のように多対多の関係を持っています(ライブラリタイプのアプリケーションで):
User:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "user_book",
joinColumns = {@JoinColumn(name = "fk_user")},
inverseJoinColumns = {@JoinColumn(name = "fk_book")}
)
private List<Book> books = null;
Book:
@ManyToMany(cascade = {CascadeType.ALL},
mappedBy = "books", fetch = FetchType.LAZY)
private List<User> users;
問題:本の名前を編集すると、テーブルの値が更新されますが、休止状態のキャッシュのため、Userオブジェクトは古い本のエンティティへの参照を保持しています。したがって、バックエンドでは正しい簿価がありますが、UIではまだ古い値が表示されます。私はehcacheを使用しており、第2レベルのキャッシュも有効にしています。キャッシュ構成:
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToLiveSeconds="120"
overflowToDisk="false"
diskPersistent="false"
/>
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="10000"
timeToIdleSeconds="300"
/>
<cache name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="10000"
timeToIdleSeconds="300"
/>
OEMIVフィルターも使用しています。