Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

Hibernate实体对象的三种状态

来源: huangronaldo 分享至:

Hibernate实体对象的三种状态

实体对象的生命周期,是Hibernate应用中的一个关键概念。实体对象生命周期的三种状态如下:

1.Transient(自由状态)

所谓Transient,即实体对象在内存中的自由存在,它与数据库中的记录无关。如:

public void methodA(){ User user = new User(); user.setName("Huangt"); }

这里的user对象,与数据库中的记录没有任何关系。

2.Persistent(持久状态)

所谓Persistent,即实体对象处于由Hibernate框架所管理的状态。这种状态下,实体对象的引用被纳入Hibernate实体容器中加以管理。

Transaction tx = session.beginTransaction(); session.save(user); //此时user对象已经由Hibernate纳入实体管理容器,处于Persistent状态 tx.commit();//事务提交之后,库表中已经插入一条用户 Transaction tx2= session.beginTransaction(); user.setName("huang") ;//Persistent anotherUser.setName("ronaldo") ; //Transient tx2.commit() ; /* 虽然这个事务中我们没有显示调用session.save()保存对象 但是由于处于Persistent状态的对象将自动被固化到数据库中,因此user对象 的变化也将同步到数据库中,’Huangt‘用户记录已经被更新为‘huang’ 而对于Transient状态的anotherUser 来说,并没有改变 */

可以看到,处于Transient状态的实体对象,可以通过session.save() 方法转换为Persistent状态。而同样,如果一个实体对象是由Hibernate加载(如通过session.load方法获得),那么,它也处于Persistent状态。Persistent对象对应了数据库中的一条记录,可以看作是数据库记录的对象化操作接口,其状态的变更将对数据库的记录产生影响。

简而言之,如果一个实体对象与某个Session实例发生了关联,并处于对应Session有效期内,那么它就处于Persistent状态。

3.Detached(游离状态)

处于Persistent状态的对象,其对应的Session实例关闭之后,那么,此对象就处于“Detached”状态。

Session实例可以看作是Persistent对象的宿主,一旦此宿主失效,那么其从属的Persistent对象即进入Detached状态。

Transaction tx = session.beginTransaction(); session.save(user); //此时user对象已经由Hibernate纳入实体管理容器,处于Persistent状态 tx.commit();//事务提交之后,库表中已经插入一条用户 tx2.commit() ; session. close() ; //user对象此时状态为Detached,因为与其关联的session已经关闭

那么,Detached状态与Transient状态有什么区别?

区别就在于Detached对象可以再次与某个Session实例相关联而成Persistent对象。


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史