您的位置:首页 > 其它

hibernate中对象的三个状态理解

2013-06-19 00:00 423 查看
Hibernate中对象的三大状态
一、transient(临时态)特点:通过new操作创建出来的对象,此时的对象未被纳入session管理,数据库中没有相对应的记录

二、persistent(持久化状态)
例如:在service层可以实现更新数据库数据
Syuser syuser=userDao.get(Syuser.class, user.getId());
syuser.setName(user.getName());

persistent状态的对象被纳入了session管理,session就相当于Hibernate的一个缓冲区,被纳入session
管理的对象(持久化对象)时刻被hibernate所监视,persistent态的对象属性一旦发生改变,就会被
hibernate察觉,并会生成相应的sql语句(但并未立即与数据库交互),当session提交时,hibernate会
清理缓存(也叫脏数据检查),这时候就会和数据库同步(通过底层的JDBC与数据库交互)。
注释:hibernate清理缓存的方式,是采用快照比对的方式(持久化对象的每次变动都会被记录下来)

三、detached(托管状态/离线状态)

detached状态的对象,数据库中存在,但未被纳入session管理。
如果对detached状态的对象加以修改,那么就还得将其纳入一个新的session对象管理,并且还要显示的
update(),update后的对象又成为了persistent状态了

detached状态的对象是如何产生的呢?
有两种方式:
1、对象被纳入session管理后,此session清空或者关闭时,这是的对象就称为detached态了
2、可手动的构造detached态的对象,通过new操作,new出来的对象,手动setId()将id设成数据库中
已经存在的,这时的对象也是detached状态的。(一般不建议采用此法)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: