当Session的load()方法试图从数据库中加载一个Customer对象时,Session先判
断缓存中是否已经存在这个Customer对象,如果存在,就不需要再到数据库中检
索。
Session缓存的两大作用1.减少访问数据库的频率。2.保证缓存中的对象与数
据库中的相关记录保持同步。3.当缓存中的持久化对象之间存在循环关联关系时
,Session会保证不出现访问对象图的死循环,以及由死循环引起的Jvm堆栈溢出
异常。
提示:当Session加载了Customer对象后,会为Customer对象的值类型的属性复
制一份快照。当Session清理缓存时,通过比较Customer对象的当前属性与它的
快照,Session能够判断Customer对象的那些属性发生了变化。
Session 在清理缓存时,按照以下顺序执行SQL语句。
1.按照应用程序调用Session.save()方法的先后顺序,执行所有对实体进行插入
的insert语句。
2.执行所有对实体进行更新的update语句。
3.执行所有对集合进行删除的delete语句。
4.执行所有对集合元素进行删除,更新或者插入的SQL语句。
5.执行所有对集合进行插入的insert语句。
6.按照英语程序调用Session.delete()方法的先后顺序,执行所有对实体进行删
除的delete语句。
在默认情况下,Session会在下面的时间点清楚缓存。