类级别的Ehcache和查询没有同步

时间:2017-05-29 17:32:02

标签: spring jpa caching ehcache

我在XMl中的类Employee的缓存配置

 <cache name="com.model.Employee"
            maxEntriesLocalHeap="100" overflowToDisk="false" statistics="true" />

<cache name="employees" maxEntriesLocalHeap="1000" overflowToDisk="false" timeToLiveSeconds="60" statistics="true" />

使用查询缓存来获取员工

@QueryHints({@QueryHint(name = "org.hibernate.cacheable", value = "true"), @QueryHint(name="org.hibernate.cacheRegion", value="employees")})
    List<Employee> findAll();

两个应用程序使用相同的数据库,例如A&amp; B,如果应用程序删除员工Id 8,但同时应用程序B可能使用此缓存ID为8。

使用当前配置,应用程序B中的employee对象可能为空。

解决此问题或改进当前配置的任何提示

1 个答案:

答案 0 :(得分:1)

这是缓存的概念。你有两个选择:

  • 与一些陈旧的价值相似(并为您支持的陈旧情况配置过期)
  • 当值变为陈旧时从缓存中退出

从我的记忆中到目前为止,Hibernate默认情况下这样做。但这可能会有所改变。他们将从缓存中逐出与更新的表相关的所有查询。无论如何,那是你似乎想要的那种行为。

但是,你说的是两个应用程序。如果我假设没有共享他们的缓存,那么...他们应该。否则,您无法从其他应用程序的缓存中逐出。所以你需要Ehcache缓存通信/复制。