Hibernate中不为人知的细节

[align=center][size=x-large][color=blue]hibernate的缓存[/color][/size][/align]
研究缓存:
1、一个持久化对象是在什么时候放进缓存中的
当执行session.get,load,save,update方法

2、在什么时候可以把缓存中的数据提取出来
如果缓存中有数据,则从缓存中拿出数据

3、缓存中的数据和数据库中的数据同步的问题
oscache ehcache josscache
--1、session.save或者session.update本身就是同步数据的过程
--2、可以利用session.flush做到数据的同步


注意点:
1、一级缓存又叫session缓存
2、一级缓存的生命周期和session的声明周期紧密相连的

sessionFactory.openSession -->一级缓存就开始起作用了

session.close-->session缓存中的数据全部清空了


通过session.get方法把一个持久化对象放入到一级缓存中,即放入到session缓存中
session.load
session.save
session.update


createQuery产生的数据是不会放到一级缓存中的,即session缓存

当执行session.get(Classes.class,1);的时候,把id 为1的classes对象放入到session的缓存中
当执行session.close时,意味着session的生命周期结束了


当缓存中有数据,则先从缓存中提取数据,如果缓存中没有数据,则向数据库要数据


如何清空session中的缓存数据?

测试session.evict--清空某一个对象的缓存
测试session.clear--清空所有缓存

当这个数据是共享的情况下,加载这个数据,最好先evict清空缓存,这样得到的结果肯定是与数据库同步的


session.flush
作用:
1、检测session缓存中的数据,如果发现持久化对象和数据库不同步,会发出SQL语句,保持对象和数据库的同步状态

2、在同步数据的过程中,并不情空缓存


说明:没有显示调用session.flush方法,则session.save或者session.update方法:
1、把参数的持久化对象同步到数据库中
2、把session缓存中的数据同步到数据库中
3、把参数的持久化对象放入到session的幻存中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值