此问题与我的其他question
有关我正在构建一个Spring web应用程序,它使用hibernate从DB读取数据。我的应用程序不会知道对数据库进行的任何更改(更新/插入)。有没有办法在这种情况下使用查询缓存?
我配置了查询缓存,当我从不同的应用程序更新数据库时,它不会使缓存失效。我认为这是预期的行为。
当DB中有更新时,我需要缓存和无效的查询。怎么做到这一点?
答案 0 :(得分:1)
我不确定是否有任何自动刷新缓存的方法。但我在上一个项目中解决了这个问题。公开如下方法并授予管理员访问权限。在DB外部完成任何修改后,请调用此方法刷新缓存。
public void refreshCache()
{
try {
Map<String, ClassMetadata> classesMetadata = sessionFactory.getAllClassMetadata();
for (String entityName : classesMetadata.keySet()) {
sessionFactory.evictEntity(entityName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
如果您使用的是Oracle,以下命令将为您提供表中最后更新的唯一scn
select max(ora_rowscn) from TableName;
<强>输出强>
10772982279880
如果你想要
,你还可以将其转换为时间戳select scn_to_timestamp(10772982279880) from dual
但是idont认为您需要将其转换为时间,只需缓存rowscn并定期检查表,如果有更改,您可以逐出缓存区域。
Please note that this supports version > 10g