Session中的缓存可以理解为一个Hibernate应用中处于持久状态对象的集合。当Session的load方法视图从数据库中加载某个对象时,Session会先判断在缓存中是否已经存在这个对象了,如果存在就不需要到数据库中进行检索。只要Session的缓存没有被清空,持久对象的生命周期便没有结束。
Session中的缓存清空与缓存的清理是两个概念。缓存清空是指将缓存内的持久对象进行清除,持久对象在缓存清空之后便结束了其生命周期,一般在调用close()和clear()等方法的时候进行缓存的清空。
Session的缓存的清理是指每隔一段时间,Session执行SQL语句的时候将内存中的对象的状态同步到JDBC链接中。一般默认调用org.hiberbate.Transaction.commit()方法、Session的flush()方法以及执行某些查询的时如:find()和iterate()方法进行清理。
注意的是,如果使用标示方法是native,那么在调用save()方法的时候会立即执行insert语句。
Session.flush()操作进行缓存清理时,会执行上述SQL语句,但是不会提交事务。Transaction.commit()方法会先执行flush()方法,然后提交事务。
除了默认的时间点进行缓存的清理之外,也可以改变默认的设置,来控制清理操作的发生频率。
FlushMode类定义了三种不同的方式,可以通过Session.setFlushMode()方法进行设置。
1.FlushMode.AUTO:于默认的清理方式相同。
2.FlushMode.COMMIT:在执行commit方法和flush方法