Hibernate缓存陈旧数据:多对多单向映射

时间:2012-06-12 13:46:03

标签: hibernate

我有如下多对多关系(在库类型应用程序中):

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;

问题:当我编辑书名时,值会在表中更新,但是由于hibernate缓存,User对象仍然保留对旧书实体的引用。因此,在后端我有正确的Book值,在UI上我仍然看到陈旧的值。我正在使用ehcache并启用了二级缓存。 缓存配置:

<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过滤器。

1 个答案:

答案 0 :(得分:0)

我认为你必须调用方法

Flush()

这是因为您对第一级或第二级缓存所做的任何更改都将存储到缓存中,但是直到您刷新缓存,数据才会实际存储到数据库中。

希望这有帮助!