我对hibernate的对象的3种状态的理解

时间:2023-03-10 01:47:30
我对hibernate的对象的3种状态的理解

老师的说法

Hibernate中对象的状态
    在Hibernate使用中,对象的状态有以下三种
    a.临时对象 : 在程序中使用new方式创建的对象
    b.持久对象 : 在程序中与session对象关联,由session负责管理的对象.
                   处于session缓存中的对象都是持久对象
                   对象的持久性:指的是对象的数据状态在事务提交时可以与数据库保持同步更新.
             session.flush();//将持久对象与数据库同步
             tx.commit();//事务提交,提交前默认也调用session.flush()
    c.托管对象 : 在程序中如果session.close()后,session负责管理的持久对象将成为托管对象.
   垃圾回收器负责回收临时和托管状态,持久状态不能回收.

1. 临时对象:数据库中不存在该对象且没有与session关联的对象,是代码new 出来的,此时该对象既无ID也是内存中独立的对象
  2. 持久对象:应该分2种情况:
     a. 数据库中不存在该对象,但已经与session关联,并且对象的id也已经存在了,即事务提交时可以与数据库保持同步
     b. 数据库已经存在的对象,类似被session.load出来,此时的对象也是被session管理的,更新和删除等操作,事务提交后当然可以与数据库同步
  3. 脱管对象:
     也有可能数据库中存在或者不存在,其实脱管就是:由session管理变为session不再管理,而交由JVM去管理(可能被回收)
    可能是:
           a. 数据库中存在了,被load出来update
           b. 临时对象已经与session关联,但事务没提交
              ...
           等情况下,session关闭或清除缓存了。

先自己理解一下,然后结合老师的说法,此刻总算可以较为清晰的理解hibernate的3种对象状态了。