1. Session缓存
为了让对象A一直处于生命周期中,要么对象A被显示引用,要么对对象A的引用保存在始终处于生命周期中的对象B中,直到对象B的生命周期结束而结束。在Session接口的实现中包含了一系列的Java集合,这些集合用于保存对持久化对象的引用,因此这些Java集合就构成了Session的缓存。
当调用Session接口的save()方法持久化一个对象时,该对象被加入到Session缓存中,以后只要Session缓存没有被清空,该对象将一直处于生命周期中。
当调用Session接口的get()方法试图装载一个持久化对象时,Session首先判断缓存中是否存在这个对象,若存在则返回,若不存在则从数据库中检索。
2. Session缓存的作用
(1) 减少访问数据库的频率。应用程序从缓存中读取持久化对象的速度显然优于从数据库中检索数据的速度。
(2) 当缓存中的持久化对象之间存在循环关联关系时,Session会保证不出现访问对象图的死循环,以及由死循环引发的JVM堆栈溢出。
(3) 保证数据库中的相关记录与缓存中的记录同步。Session在清理缓存的时,会自动进行脏数据检查(dirty-check),如果发现Session缓存中的对象与数据库中相应记录不一致,则会按最新的对象属性更新数据库。