Hibernate 的一级缓存和二级缓存都是对实体进行缓存,他不会缓存普通属性,如果想对普通熟悉进行缓存,可以考虑使用查询缓存。

对于查询缓存来说,他缓存的Key就是查询所用的 HQL 或者 SQL 语句,查询缓存不仅要求使用的语句相同,还要求参数必须一致,查询缓存默认是关闭的,为了开启查询缓存,需要修改 Hibernate.cfg.xml 配置文件,增加如下配置:

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

要使用查询缓存还必须在调用查询时,使用 setCacheable 方法开启缓存,示例代码如下:

 
 

public static void main(String[] args) {

Session curSession = hibernateUtils.openSession();

try {

 
 

// 第一次查询,启用了缓存

List list = curSession.createQuery("SELECT trm FROM TransitRecordModel trm").setCacheable(true).list();

System.out.println("Query Size=" + list.size());                

// 第二次查询,启用了缓存,因此从缓存读取,不发起数据库查询操作

list = curSession.createQuery("SELECT trm FROM TransitRecordModel trm").setCacheable(true).list();

System.out.println("Query Size=" + list.size());

} finally {

if (curSession != null) {

curSession.close();

}

}

}

 
 

查询缓存和二级缓存的交互
通过 setCacheMode 方法来设置,有如下几种类型:

  1. CacheMode.NORMAL:正常模式(默认),Session会向二级缓存中读取和写入数据。
  2. CacheMode.IGNORE:忽略模式,Session不会向二级缓存读取,也不会写入数据。
  3. CacheMode.GET:Session对二级缓存只读不写。
  4. CacheMode.PUT:Session对二级缓存只写不读。
  5. CacheMode.REFRESH:刷新模式,Session不会从二级缓存中读取数据,但会向其中写入从数据库读取的数据。和PUT的区别在于REFRESH会忽略配置文件中的hibernate.cache.use_minimal_puts属性,强制刷新二级缓存中的所有数据。

 
 

 
 

笔记:Hibernate 查询缓存的更多相关文章

  1. mybatis学习笔记(14)-查询缓存之中的一个级缓存

    mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...

  2. Hibernate <查询缓存>

    查询缓存: 定义:查询缓存它是基于二级缓存的,可以保存普通属性查询的结果,查询对象实体时,他会保存id作为键,查询结果作为值,下个对象访问时,可以直接查到 查询缓存查询实体对象时,显著的特点是,会执行 ...

  3. hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存

    二级缓存(sessionFactory): Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存.它可以缓存整个应用的持久化对象,所以又称为“SessionFactor ...

  4. Hibernate 所有缓存机制详解

    hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  5. Hibernate(十六):Hibernate二级缓存

    Hibernate缓存 缓存(Cache):计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如磁盘上的文件或者数据库)之间,起作用是降低应用程序直接读取永久性数据存储源的频率,从而提高应用 ...

  6. Hibernate查询以及优化策略04

    一. HQL查询 1. HQL(hibernate query language)单表查询 1.1 准备项目 创建项目: hinernate-03-query 引入jar,同前一个项目 复制实体(订单 ...

  7. Hibernate所有缓存机制详解

    hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  8. [JavaEE]Hibernate 所有缓存机制详解

    Hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  9. [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. java程序中执行HiveQL

    这里是指java中执行hive或者hiveQL. 注意:而不是经常说的通过JDBC的方式连接Hiveserver2来执行查询.是在部署了hiveserver的服务器上执行hive命令.这样就可以将分析 ...

  2. 妙用ES6解构和扩展运算符让你的代码更优雅

    http://www.cnblogs.com/chrischjh/p/4848934.html

  3. CSS盒模型的深度思考及BFC

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型 ...

  4. DataCleaner第一章

    Part1. Introduction to DataCleaner 介绍DataCleaner |--What is data quality(DQ) 数据质量? |--What is data p ...

  5. RTLinux编程总结

    做过一个有关RTLinux的项目,时间一长,差不多忘光了,现在尽量把原来做过的东西总结一下,以备后用,同时正在做类似项目的一个借鉴平台主机:redhat 8.0目标机:PC104模块.ISA总线脉冲输 ...

  6. 利用squid 反向代理提高网站性能

    部分转自:http://www.ibm.com/developerworks/cn/linux/l-cn-squid/ Squid 反向代理的实现原理 目前有许多反向代理软件,比较有名的有 Nginx ...

  7. Linux显示文件和目录的详细资料

    Linux显示文件和目录的详细资料 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -l 总用量 56 -rw-r--r-- 1 youhaidong y ...

  8. C# MVC的一种高效分页的html方法

    首先创建一个html的扩展方法,这个方法是万能的,可以直接拿到您的项目中使用: //主要就是输出分页的超级链接的标签 //自定义分页Helper扩展 public static HtmlString ...

  9. winfrom如何在listview中添加控件

    private Button btn = new Button(); private void Form1_Load(object sender, EventArgs e) { ListViewIte ...

  10. 石子归并 51Nod - 1021

    N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价.   例如: 1 2 3 4,有 ...