0

私は以下のように多対多の関係を持っています(ライブラリタイプのアプリケーションで):

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フィルターも使用しています。

4

1 に答える 1

0

メソッドを呼び出す必要があると思います

Flush()

これは、第 1 レベルまたは第 2 レベルのキャッシュに加えた変更がキャッシュに保存されるためですが、データが実際にデータベースに保存されるのは、キャッシュをフラッシュするまでではありません。

お役に立てれば!

于 2012-06-12T14:12:55.780 に答える