我在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对象可能为空。
解决此问题或改进当前配置的任何提示
答案 0 :(得分:1)
这是缓存的概念。你有两个选择:
从我的记忆中到目前为止,Hibernate默认情况下这样做。但这可能会有所改变。他们将从缓存中逐出与更新的表相关的所有查询。无论如何,那是你似乎想要的那种行为。
但是,你说的是两个应用程序。如果我假设没有共享他们的缓存,那么...他们应该。否则,您无法从其他应用程序的缓存中逐出。所以你需要Ehcache缓存通信/复制。