2015-12-22 123 views
0

我知道,如果在持久存储中发生任何更新,L2高速缓存无法自行更新。那么,我应该在DAO层的每个写入或更新方法之后调用evict2ndLevelCache()方法吗?或者有更好的策略?休眠:使第二级高速缓存无效

http://howtodoinjava.com/2013/07/02/how-hibernate-second-level-cache-works/

如果某些用户或进程直接在数据库中的变化,有 没有办法,二级缓存更新自己,直到 “timeToLiveSeconds”时间已经过去了高速缓存区域。在这个 的情况下,最好是使整个缓存无效,并让hibernate 再次构建它的缓存。你可以使用下面的代码片段 使整个hibernate二级缓存失效。

+0

[当另一个进程修改数据库时Hibernate二级高速缓存失效]的可能重复(http://stackoverflow.com/questions/1603846/hibernate-2nd-level-cache-invalidation-when-another-process-modifies-该数据库) – Tarik

+0

嗨,链接还提供了一个示例驱逐方法。我担心它的使用?那么我的理解是否正确:每个更新方法后面跟着一个驱逐方法调用? – Forkmohit

回答

1

如果你正在做Hibernate实体本身的改变,你不需要做任何事情来确保二级缓存的一致性,Hibernate会照顾它。

如果您通过本机查询进行更改,则明确提及哪些实体会受到影响,否则Hibernate将使整个二级缓存失效,如解释here所述。

如果您要从另一个进程更改数据库中的数据,那么Hibernate不会意识到它,您将不得不定义一个最适合您需求的策略(过期策略,从应用程序外部调用的显式失效等)。