Hibernate中不为人知的细节

hibernate的缓存

研究缓存:
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的幻存中

猜你喜欢

转载自liuxife88.iteye.com/blog/1952960