老师的说法
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种对象状态了。