我只是实现了hibernate查询缓存。我只是想知道hibernate缓存概念的行为/工作,如果我在已经缓存的表上进行手动更新和hibernate更新。
情景:
反映了更改,或者我需要重新启动服务器。
以下是我的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>
答案 0 :(得分:0)
如果您始终通过Hibernate API更新TableA
,那么Query Cache可能会失效。
使用HQL,您是安全的,因为Hibernate可以提取更新的表并使可能过时的查询缓存区域无效。
使用本机查询,每当运行本机SML语句时,所有查询缓存区域都将失效。要限制受影响的查询缓存区域,您需要指定Synchronization
,如下所示:
session.createSQLQuery(
"update TableA set name = '\"'||name||'\"' "
)
.addSynchronizedEntityClass(TableA.class)
.executeUpdate()