一级缓存
为了减少对数据库的访问次数,提高查询效率,hibernate提供了一级缓存和二级缓存,这里先介绍一级缓存,一级缓存是session级别的。
什么是一级缓存?
执行上述语句,我们会发现hibernate只向数据库发送了一次select语句,这是因为存在一级缓存的缘故,所以第二次进行查询时,session会先在缓存中查询看是否存在该对象,如果存在则不会去数据库中进行查询。
session缓存有关操作
flush操作
flush操作是指按照缓存中对象的属性变化来同步更新数据库。 什么时候会执行flush操作?
1.显示调用session的flush方法
2.在执行transaction的commit方法时,会先进行flush操作,然后向数据库提交事务
3.在执行HQL或者QBC查询时,如果缓存中持久化对象的属性已经发生了变化会先flush缓存。
注意:如果对象使用native方式生成OID,那么调用Session 的save方法时会立刻执行insert语句获取持久化对象的OID。
reflush操作
reflush会强制发送select语句,使session缓存中的记录和数据库记录保持一致 调用session.reflush方法即可
clear操作
清理缓存。调用clear方法和关闭session时会进行清理缓存。