Session的缓存
Java对象的生命周期
如果希望一个Java对象一直处于生命周期中,就必须保证至少有一个变量引用它,或者在一个Java集合中存放了这个对象的引用。
Session的缓存
Session对象中维护的缓存即称为Hibernate的一级缓存(first cache)
在Session接口的实现类中定义了一系列的Java集合,这些Java集合构成了Session的缓存
Session中的缓存中存放着一系列的持久化对象。
Hibernate一级缓存
Hibernate对象的三种状态
临时状态/临界状态/瞬时状态(transient)
刚刚使用 new 语句创建对象,还没有被持久化,不处于Session缓存中,处于临时状态的Java对象也被称为临时对象。
特征
不处于Session缓存中,也可以说,不被任何一个Session对象关联
在数据库中没有对应的记录
持久化状态/受管状态(presistent)
对象已经被持久化,并加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象
特征
被一个Session对象关联
持久化对象和数据库中的相应记录对应
Session在清理缓存时会根据持久化对象的属性变化来同步更新数据库
游离状态(detached)
对象已经被持久化,但是不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。
特征
不再位于Session缓存中,也可以说,游离对象不被Session关联
游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提是没有其他程序删除了这条记录)
游离对象与临时对象的相同之处在于,两者不被Session关联,因此Hibernate不会保证它们的属性发生变化与数据库同步
游离对象与临时对象的区别之处在于,前者是由持久化对象转变过来 的,因此可能还在数据库中存在着对应的记录,而后者没有。
Hibernate对象的比较
是否与Session关联 | 数据库表中是否有对应的记录 |
---|---|
临时对象 | 不关联 |
游离对象 | 不关联 |
持久化对象 | 关联 |