我了解如果持久性存储中发生任何更新,L2缓存无法自行更新。那么,我应该在DAO层的每个写入或更新方法之后调用evict2ndLevelCache()方法吗?还是有更好的策略?
http://howtodoinjava.com/2013/07/02/how-hibernate-second-level-cache-works/
如果某个用户或进程直接在数据库中进行更改,那么就在那里 绝不是第二级缓存更新自己直到 该缓存区域已经过了“timeToLiveSeconds”持续时间。在这 最好是让整个缓存无效并让hibernate运行 再次构建其缓存。您可以使用下面的代码段 使整个hibernate二级缓存无效。
答案 0 :(得分:2)
如果您正在对Hibernate实体进行更改,那么您不必做任何其他事情来确保L2缓存的一致性,Hibernate会负责它。
如果您通过本机查询进行更改,则明确提及哪些实体受到影响,否则Hibernate将使整个二级缓存失效,如here所述。
如果要从另一个进程更改数据库中的数据,那么Hibernate就不会意识到这一点,您必须定义最适合您需求的策略(过期策略,从应用程序外部调用的显式失效,等)。