问题描述
我只是实现了hibernate查询缓存。 我只是想知道hibernate缓存概念的行为/工作,如果我在已经缓存的表上进行手动更新和hibernate更新。
场景:
- 选择缓存表A.
- 更新表A(手动或休眠)
- 再次选择表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>
1楼
如果您始终通过Hibernate API更新TableA
,则可能会失效。
使用HQL,您是安全的,因为Hibernate可以提取更新的表并使可能变得陈旧的查询缓存区域无效。
使用本机查询,每当运行本机SML语句时,所有查询缓存区域都将失效。 要限制受影响的查询缓存区域,您需要指定
Synchronization
,如下所示:session.createSQLQuery( "update TableA set name = '\\"'||name||'\\"' " ) .addSynchronizedEntityClass(TableA.class) .executeUpdate()