Hibernate 二级缓存疑难点
- 一级缓存:缓存实体
- 二级缓存:缓存实体
- Hibernate查询缓存缓存的是查询出来的实体的部分属性结果集和实体的ID(注意这里不是实体)。
- Hibernate查询缓存:对List起作用。但是Hibernate查询缓存对Iterator不起作用,只对List起作用。
Iterator不考虑缓存,必会执行,且仅查询出实体id的集合。
Iterator iter = session.createQuery("from GoUser").iterate();
for(;iter.hasNext();){
GoUser u = (GoUser) iter.next();
System.out.println(u.getName());
}
说明:Iterator这种方式会得到实体的id集合,查询实体的具体属性时会重新向数据库发出请求。
如果开启二级缓存,循环遍历时二级缓存会将实体保存。
关闭二级缓存,开启查询缓存的情况下
Session session = sf.openSession();
session.beginTransaction();
List<User> list = (List<User>) session.createQuery("from User")
.setCacheable(true).list();
for (User u : list) {
System.out.println(u.getName());
}
session.getTransaction().commit();
session.close();
System.out.println("-----------------分割线------------------");
Session session2 = sf.openSession();
session2.beginTransaction();
List<User> list2 = (List<User>) session2.createQuery("from User")
.setCacheable(true).list();
for (User u : list2) {
System.out.println(u.getName());
}
session2.getTransaction().commit();
session2.close();
执行结果:

说明:
关闭二级缓存,开启查询缓存的情况下,第一次list查询,将所有实体的属性信息查询出来,只执行了一条语句,然后仅保存了实体id的列表,所以第二次查询时,由查询缓存中的id去数据库中取实体数据。
二级缓存、查询缓存都开启的情况下
代码如上例
执行结果:

说明:
二级缓存和查询缓存都开启的情况下,由于查询语句相同,则从查询缓存中查找对应的id集合,然后根据id再从二级缓存中查找对应的实体,所以只执行一次数据库操作。
Hibernate 二级缓存疑难点的更多相关文章
- Hibernate 二级缓存 总结整理(转)
和<Hibernate 关系映射 收集.总结整理> 一样,本篇文章也是我很早之前收集.总结整理的,在此也发上来 希望对大家有用.因为是很早之前写的,不当之处请指正. 1.缓存:缓存是什么, ...
- Hibernate二级缓存 --Hibernate框架
Hibernate本身只提供了二级缓存的规范,但并未实现,所以需要第三方缓存插件的支持.常用的二级缓存第三方插件有:EHCache.Memcached.OSCache.SwarmCache.JBoss ...
- Hibernate ——二级缓存
一.Hibernate 二级缓存 1.Hibernate 二级缓存是 SessionFactory 级别的缓存. 2.二级缓存分为两类: (1)Hibernate内置二级缓存 (2)外置缓存,可配置的 ...
- 配置Hibernate二级缓存时,不能初始化RegionFactory的解决办法
配置Hibernate 二级缓存时,出现以下bug提示: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder&quo ...
- 配置Hibernate二级缓存步骤
配置Hibernate二级缓存步骤: 加入二级缓存的jar包及配置文件 jar包位置:hibernate-release-4.1.8.Final\lib\optional\ehcache下所有jar包 ...
- 建立Hibernate二级Cache
建立Hibernate二级Cache它需要两个步骤:首先,一定要使用什么样的数据并发策略,然后配置缓存过期时间,并设置Cache提供器. 有4种内置的Hibernate数据并发冲突策略,代表数据库隔离 ...
- Hibernate(十六):Hibernate二级缓存
Hibernate缓存 缓存(Cache):计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如磁盘上的文件或者数据库)之间,起作用是降低应用程序直接读取永久性数据存储源的频率,从而提高应用 ...
- hibernate二级缓存demo2
@Test public void hello3(){ Session session=sessionFactory.openSession(); List list = session.create ...
- hibernate二级缓存整合
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http:// ...
随机推荐
- 团队作业5——英语学习/词典App行业Top5
来自权威研究机构易观智库的最新数据表明,国内几家主流词典类App市场的份额占比差异化分布进一步加剧. 对于156万安卓移动端活跃数字消费者的移动互联网行为监测结果显示,截至2014年8月底,有道词典A ...
- [Cyan之旅]使用NPOI实现Excel的导入导出,踩坑若干.
Cyan是博主[Soar360]自2014年以来开始编写整理的工具组件,用于解决现实工作中常用且与业务逻辑无关的问题. 什么是NPOI? NPOI 是 POI 项目的 .NET 版本.POI是一个开源 ...
- Final版本发布评论
1.飞天小女警组做的礼物挑选小工具,相比较beta版本并没有太大的改动,新增添了“猜你喜欢”模块,在最后给出的礼物推荐下面会给出三个猜你喜欢的礼物.这样解决了推荐礼物的单一,也让礼物推荐变得更有趣了. ...
- activiti-explorer 启动报错 Error creating bean with name 'demoDataConfiguration'
来源:http://blog.csdn.net/huangning2/article/details/9247099 Activiti database setup As said in the on ...
- 善用Eclipse的代码模板功能
转载自: 善用Eclipse的代码模板功能 Eclipse是个非常强大的IDE,作为一个JAVA程序员,几乎每天都与它打交道,但是它强大的功能都用到了吗? 今天让我们来看一下Eclipse中的“代码模 ...
- InputStream流无法重复读取的解决办法
前言:今天工作的需要需要读取aws云上S3桶里面的PDF数据,第一步能够正常的获取PDF文件的InputStream流,然后,我为了测试使用了IOUtils.toString(is)将流System. ...
- hdu6444 Neko's Loop
要想A一道题,你需要正版ide,正版草稿纸,正版键盘,正版双手,但最重要的是正版大脑.(改编自wxf在微积分群的吐槽) 分析一下题意,选的所有数的下标模gcd(n,k)都是同余的,而且是在所有同余的下 ...
- Cheerleaders UVA - 11806(容斥+二进制技巧)
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...
- 【BZOJ3832】[POI2014]Rally(拓扑排序,动态规划)
[BZOJ3832][POI2014]Rally(拓扑排序,动态规划) 题面 BZOJ,权限题 洛谷 题解 这题好强啊,感觉学了好多东西似的. 首先发现了一个图画的很好的博客,戳这里 然后我来补充一下 ...
- c++中的 Stl 算法(很乱别看)
#include <iostream> #include <vector> #include <functional> #include <algorithm ...