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属性,强制刷新二级缓存中的所有数据。

 
 

 
 

最新文章

  1. grunt 检测js配置
  2. 群晖SVN Server远程访问
  3. win7默认网关不可用怎么解决
  4. BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元
  5. jQuery Mobile中文手册:开发入门
  6. Egret的VS环境搭配
  7. 使用Sqlserver事务发布实现数据同步
  8. C++常用语法
  9. ExtJs 添加员工 实例 ---- 锚点布局 anchor 可自动伸缩
  10. UVA 1351 - String Compression
  11. 常用模式之Command模式入门
  12. javascript 中的nextSibling和previousSibling使用注意事项
  13. JavaScript中String对象处理HTML标记中文本的方法
  14. NSArray数组的学习总结
  15. iOS苹果官方Demo合集
  16. DCOS实践分享(2):基于Docker Compose和Swarm的Docker化之路
  17. Spring IOC容器的初始化流程
  18. EL表达式格式化日期
  19. PAT 甲级1003 Emergency (25)(25 分)(Dikjstra,也可以自己到自己!)
  20. 优秀的Android资源

热门文章

  1. mysql varchar vs oracle varchar2
  2. mysql命令汇总
  3. linux 版本控制及rpm打包
  4. qwe 简易深度框架
  5. Jenkins构建Android项目持续集成之findbugs的使用
  6. FMECA分析
  7. mysql常用基础操作语法(二)~~对表的增删改操作【命令行模式】
  8. $_FILES数组为空的原因
  9. mysql字符串连接
  10. 错误代码: 1054 Unknown column &#39;course&#39; in &#39;field list&#39;