当前位置: 代码迷 >> java >> 选择并更新hibernate缓存表
  详细解决方案

选择并更新hibernate缓存表

热度:22   发布时间:2023-08-02 10:47:03.0

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

场景:

  1. 选择缓存表A.
  2. 更新表A(手动或休眠)
  3. 再次选择表A.

反映的更改或我需要重新启动服务器。

下面是我的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>

如果您始终通过Hibernate API更新TableA ,则可能会失效。

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

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

     session.createSQLQuery( "update TableA set name = '\\"'||name||'\\"' " ) .addSynchronizedEntityClass(TableA.class) .executeUpdate() 
  相关解决方案