读书人

Hibernate中一级缓存、二级缓存及查询

发布时间: 2012-07-23 09:42:19 作者: rapoo

Hibernate中一级缓存、二级缓存及查询缓存的技术性总结

查询缓存是专为 Query 的 list 方法设计的。对于 iterate() 方法,无论是查询对象属性还是对象本身,查询缓存用与不用都没有区别!

1. 用查询缓存查询属性:

(1)??? 查询缓存必须要在 hibernate.cfg.xml 中显示启用:

< property name = "hibernate.cache.use_query_cache" > true </ property >

(2)??? 在代码中如果要用到查询缓存(无论是写还是读缓存),都要进行开启操作,可通过 Query 的 setCacheable( true ) 方法开启;

(3)??? 查询缓存的生命周期 与 Session 无关(可以跨 Session 查询 ),当查询关联的表发生改变,那么查询缓存的生命周期结束 ( delete 、 update 、 modify )

(4)??? 开启查询缓存,并用 Query 查询对象的属性(可以是一个或多个)时,采用 Query 的 list 方法可以把得到的属性集合写入查询缓存中。如果查询缓存已经有了该对象的属性,那么就不会发出 SQL 而直接从查询缓存中取出来;

2. 用查询缓存查询对象:

(5)??? 如果开启查询缓存并通过 list 接口查询对象,在首次查询时会发出 SQL 从数据库中获取对象,同时将对象的 id 列表放入查询缓存中 ;如果再次用查询缓存查询对象,则会根据该对象的 id 发出 SQL 从数据库中加载对象(这时会发出 N 条 SQL 语句)

(6)??? 如果同时开启查询和二级缓存,那么(5 )中就不会发出 N 条 SQL 语句了,而是直接从二级缓存中加载。(此时的 list 接口有了读二级缓存的能力了!!!)

读书人网 >开源软件

热点推荐