hibernate只读查询缓存机制

时间:2013-02-08 03:43:44

标签: java spring hibernate caching

此问题与我的其他question

有关

我正在构建一个Spring web应用程序,它使用hibernate从DB读取数据。我的应用程序不会知道对数据库进行的任何更改(更新/插入)。有没有办法在这种情况下使用查询缓存?

我配置了查询缓存,当我从不同的应用程序更新数据库时,它不会使缓存失效。我认为这是预期的行为。

当DB中有更新时,我需要缓存和无效的查询。怎么做到这一点?

2 个答案:

答案 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