1-Session的load()方法试图从数据库中加载一个持久化对象的时候,Session先判断缓存中是否已经存在这个对象,如果存在就不需要再到数据库中检索。当调用Session的save()方法持久化对象时,该持久化对象被加入到Session的缓存中。
2-当缓存中持久化对象的状态发生了变化,Session并不会立即执行相关的SQL语句。这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数。
3-当Session清理缓存时,通过比较对象的当前属性与它的快照。Session能够判断对象哪些属性发生了变化。
4-Session清理缓存时,执行SQL语句的顺序:
4.1-insert
4.2-update
4.3-delete
4.5-针对集合元素的删除,更新,插入
4.6-对集合的插入
5-Session清理缓存的时间点:
5.1- net.sf.hibernate.Transaction.commit( ),先清理缓存,再提交数据库事务。
5.2- Session.find( ) 或者 Session.iterate( )时,如果持久化对象属性发生变化,则会先清理缓存。
5.3- Session.flush( ) 显式调用
如果对象使用native生成器来生成id时,当调用Session.save( )保存该对象时,立即执行插入的insert语句。
6- Session.flush( )方法进行缓存清理的时候,会执行一系列的SQL语句,但不会提交事务。
Session.commit( )方法会先调用flush( )方法,然后提交事务。提交事务意味着对数据库所做的更新被永久地
保存下来。