文档章节

初学hibernate之缓存

h
 hujiapeng
发布于 2016/12/28 09:43
字数 498
阅读 6
收藏 0

一、1、Session级别缓存属于一级缓存,持久化对象保存在Session一级缓存中(一级缓存引用持久化对象地址),只要session不关闭,一级缓存就存在,缓存中对象也不会被回收;

Session会在一些特定时间点,将缓存中数据flush到数据库中( Transaction的commit()、应用程序执行一些查询操作、调用session的flush方法)。

2、SessionFactory级别缓存属于二级缓存

二、证明一级缓存存在:在获取Customer的Demo中,可以使用同一个Session获取两次Customer,如:

Customer c1=session.get(Customer.class,1);//这时c1是持久化状态,c1存储在session中(一级缓存);

System.out.println(c1.getName());

Customer c2=session.get(Customer.class,1);//可验证c2获取值时并未向数据库发送SQL语句,而且c1值和c2值相同

System.out.println(c2.getName());

三、hibernate快照

Hibernate快照可以让持久化对象具有自动更新能力。

如在执行customer查询操作时Customer c1=session.get(Customer.class,1);如果取到的c1对象Name为”tom“,然后c1.setName("fox");然后提交事务并关闭session。数据库查询customer数据,id为1的记录name值更改为fox。这是快照让对象有了自动更新能力。

Hibernate向一级缓存放入数据时,同事保存快照数据(数据备份),当修改一级缓存数据,在flush操作时,对比缓存和快照,如果不一致自动更新(将缓存数据同步到数据库,并更新快照)

四、一级缓存常见操作:

1、flush,用于刷新一级缓存,使快照区数据和缓存数据一致,在没有提交数据库执行前,数据库数据没有改变

2、clear,清空一级缓存中所有对象

3、evict,清空一级缓存中指定对象

4、refresh,使用数据库数据同步一级缓存与快照(重新查数据库,更新快照和一级缓存)

 

© 著作权归作者所有

h
粉丝 0
博文 100
码字总数 60569
作品 0
海淀
私信 提问
Java 学习框架--Mutouren

简介: Mutouren是一个java学习框架,内含一些通用的系统模块, 这些模块由流行的hibernate、mybatis、struts、spring、spring mvc、memcache、redis等技术分别实现, 可以观察、对比这些技术...

sjz木头人
2015/04/14
1K
0
开源博客系统--SpringBlog

SpringBlog 是开源博客系统,主要用的到的技术有: Spring MVC + Spring Data JPA Hibernate + MySQL Spring Data Redis 用于缓存文章 Jade 作为视图模板,我极度不喜欢写 HTML 标签 Bootst...

strwei
2015/10/10
2.8K
2
hibernate 可以插入但查询时抛出异常

初学Hibernate 写第一个程序时往数据库插入可以成功,但查询时却抛出rg.hibernate.InvalidMappingException: Could not parse mapping document from resource mrluo/user.hbm.xml, 这是为什...

meluo
2014/05/07
259
2
Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

使用hibernate的时候, 报出这个错误Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]。在网上查询了一下发现很多初学hibernate的人有些会遇倒这个...

---dgw博客
2018/06/10
0
0
201407-201412_初学Java遇到的小问题

此文中的内容都是刚入学时遇到的一些小问题,有的答案是摘自网络大牛的,如有疑问和不对的地方,还请指正。 1.1. Win7 hosts路径 在C:WindowsSystem32driversetchosts文件中修改。 1.2. Tom...

涅槃Ls
2016/10/26
29
0

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
15
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
10
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
14
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
14
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部