选择并更新hibernate缓存表

时间:2015-07-23 11:11:09

标签: java hibernate caching orm ehcache

我只是实现了hibernate查询缓存。我只是想知道hibernate缓存概念的行为/工作,如果我在已经缓存的表上进行手动更新和hibernate更新。

情景:

  1. 选择缓存表A
  2. 更新表A(手动或休眠)
  3. 再次选择表格
  4. 反映了更改,或者我需要重新启动服务器。

    以下是我的hibernate属性

    <property name="hibernateProperties">
        <value>
        hibernate.dialect=org.hibernate.dialect.DB2Dialect
            hibernate.format_sql=true
            hibernate.show_sql=false
            hibernate.cache.use_second_level_cache=true
            hibernate.cache.use_query_cache=true
            hibernate.generate_statistics=true
            org.hibernate.cache.ehcache.configurationResourceName=/ehcache.xml
            hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
        </value>
    </property>
    

1 个答案:

答案 0 :(得分:0)

如果您始终通过Hibernate API更新TableA,那么Query Cache可能会失效。

  1. 使用HQL,您是安全的,因为Hibernate可以提取更新的表并使可能过时的查询缓存区域无效。

  2. 使用本机查询,每当运行本机SML语句时,所有查询缓存区域都将失效。要限制受影响的查询缓存区域,您需要指定Synchronization,如下所示:

    session.createSQLQuery(
        "update TableA set name = '\"'||name||'\"' "
    )
    .addSynchronizedEntityClass(TableA.class)
    .executeUpdate()