我有如下多对多关系(在库类型应用程序中):
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;
问题:当我编辑一本书的名称时,表中的值会更新,但是由于休眠缓存,用户对象仍然持有对旧书实体的引用。因此,虽然在后端我有正确的 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 过滤器。