场景:项目包含每周更新一次的引用数据。因此,不断从数据库中查询每笔交易的引用数据效率不高。因此缓存这些数据的动机。
问题:如果 Hibernate 中的二级缓存和查询缓存被激活,并且 hibernate 配置中的缓存元素设置为只读,那么当通过另一个程序对数据库进行更改时,hibernate 如何知道何时更新缓存。这是由 Hibernate 自动处理的还是我们必须使用某种触发器清除缓存? 如果这是由 Hibernate 处理的,有人可以阐明这是如何处理的吗?
JBoss文档对于缓存的管理不是很清楚。
我目前正在使用 Hibernate 3.6 和 Spring 3.1,如果没有必要,我不希望升级到 Hibernate 4。
最佳答案
不会的。
二级缓存期望对数据的所有访问都通过 ORM 框架进行,因此如果数据库中有另一个参与者,您的缓存将变得过时。
您可以清除缓存 - 请参阅此 code snippet
因此,您可以公开一项服务,允许第三方在数据库更新时清除应用程序上的缓存。
关于java - Hibernate二级缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078237/