Hibernate之hibernate中java对象的状态

来源:互联网 发布:凡科建站 源码 编辑:程序博客网 时间:2024/06/03 03:20

只有清楚Hibernate中java对象的状态,以及对象之间的转换点,才能更好的操作对象。

1.Hibernate中java对象有3种状态:

(1)临时状态(transient)

        刚刚通过关键字new创建出来,还没有被持久化,没有处于Session缓存中。

(2)持久化状态(persistent)

        已经被持久化,放入Session缓存中的状态。

(3)游离状态(detached)

        已经被持久化,但是不在Session缓存中。

 状态变化实例:

 

 以上三种状态动态行为都是参考Session,以下为状态转换动态转换图:

 

2.Hibernate不同状态的特征

(1)临时态特征

       不处于Session缓存中;

       没有持久化,数据库中没有记录;

       从以上流程图可以看出,在以下三种情况下,对象进入临时态:

       1.刚new出来,没有被持久化

       2.从数据库中删除对应记录,同时从Session中

       3.将游离态对象删除从数据库中删除对应记录

(2)持久态特征

       在Session缓存中;

       持久化对象与数据库中相应记录对应;

       Session有很多方法可以让不同状态对象进入持久化状态,从以上流程图,可以看出常用如下:

       1.save()或saveOrUpdate()把临时态转换为持久态,也可把游离态转换为持久态。

       2.Session的load()或get()返回对象处于持久态。

(3)游离态特征

        不在Session缓存中,即不在被Session关联;

        由持久化对象转换而来,数据库中可能存在对应记录,如果数据库对应记录没有被删除的情况下。

        从转换图可以知道,Session的以下方法会使持久化对象转换为游离态对象:

        close(),evict(),clear()

注意:临时态与游离态的区别:临时态没有被持久化,数据库中绝对不会有对应记录,而有离态由持久化变化而来,数据库记录没被删除的情况下,数据库可能存在游离态对应的记录,这是两者的根本区别。


0 0
原创粉丝点击