读书人

Hibernate查询缓存与二级缓存配备

发布时间: 2012-08-28 12:37:01 作者: rapoo

Hibernate查询缓存与二级缓存配置

关于查询缓存:
hibernate查询缓存

查询缓存是针对普通属性结果集的缓存
对实体对象的结果集会缓存id

查询缓存的生命周期,当关联的表发生修改,那么查询缓存的生命周期结束

?

查询缓存的配置和使用:
* 启用查询缓存,修改hibernate.cfg.xml文件
<property name="hibernate.cache.use_query_cache">true</property>
* 在程序中必须启用,如:?
query.setCacheable(true);

----------------------------------------------

* 开启查询缓存,关闭二级缓存
?? 开启一个session,分别调用两次query.list()查询普通属性
?? 每次调用list 都要设置? query.setCacheable(true);

?? 只发出一条sql语句;
?
* 开启查询缓存,关闭二级缓存
?? 开启两个session,分别调用query.list()查询普通属性?
?? 第二次query.list()不会发出查询sql,因为查询缓存的生命周期和session无关
?
* 开启查询缓存,关闭二级缓存
?? 开启两个session,分别调用query.iterate()查询普通属性

?? 发出两条sql语句。

?? 查询缓存只对query.list起作用,query.iterate不起作用,其实query.iterate不使用查询缓存

?

* 关闭查询缓存,关闭二级缓存
?? 开启两个session,分别调用query.list()查询实体对象?
? ?发出查询sql,因为query.list默认情况下,每次都会发出查询sql

?

* 打开查询缓存,关闭二级缓存
?? 开启两个session,分别调用query.list()查询实体对象

?? 会发出n条查询语句,因为开启了查询缓存,关闭了二级缓存,而且是跨session查询
?? 查询缓存会缓存实体对象的id,所以hibernate会根据实体对象的id加载相应的实体
?? 如果缓存中存在则加载缓存中的数据,否则根据id发出相应的查询语句

?

* 打开查询缓存,开启二级缓存
?? 开启两个session,分别调用query.list()查询实体对象?
?? 不会发出查询sql,因为开启了二级缓存和查询缓存,查询缓存缓存了实体对象的id列表
?? hibernate会根据实体对象的id到二级缓存中取得相应的数据

1 楼 gao5883649 2012-06-11 ,了忙了,之前一直打查存,但是每次都送N查,原是二存打。
感!

读书人网 >编程

热点推荐