Session是Hibernate向应用程序提供的操纵数据库的最主要的接口,我们可以通过Session来操作Java对象,完成对应数据库的操作。从根据Session管理的角度来看需要持久化的对象可以分为三种状态:Transient、Persistent、Detached。它们之间的关系如图所示:
Transient(瞬时):没有被Session所管理(即不处于Session的缓存中)的持久化对象所处的状态。刚用new语句创建,还没有被持久化。
Persistent(持久化):已经被持久化,已经加入到Session缓存中,当提交事务清理缓存时,将同步到数据库。
Detached(游离状态):已经被持久化,但不处于Session的缓存中。
由此可见,java持久化对象状态是以是否被session管理以及是否持久化到数据库进行区分的。
从上图我们也可以看出,通过调用session接口方法,可以改变java对象所处的状态,比如在调用save方法时,可以使java对象转变为持久化对象;close方法可使java对象由持久化状态转变为游离状态。上图中的所标示出的方法也将是我们继续细节上的学习。
特征与进入条件
Transient对象与Detached的相同之处在于两者都不被Session管理,而两者的不同则在于Detached对象在DB中可能存在对应的记录,而Transient对象在DB中没有对应记录。
总结:
我们在使用Hibernate的时候,需要掌握它的基本机制原理,这样能够更方便的理解和应用Hibernate为我们提供的强大功能。也更能够清楚他的设计思路,最终达到更加熟练的应用以及后面的扩展!