Hibernate实体对象的三种状态

<p style="text-align: left;">?

<p style="text-align: left;">?

<p style="text-align: left;">? ? ? ? ? ?所谓Transient,即实体对象在内存中的自由存在,它与数据库中的记录无关。如:

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

}

<p style="text-align: left;">? ? ? ? 这里的user对象,与数据库中的记录没有任何关系。

<p style="text-align: left;">? ? ? ?[b]2.Persistent(持久状态)[/b]

<p style="text-align: left;">?

   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 来说,并没有改变
*/

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

<p style="text-align: left;">? ? ? ? ? 简而言之,如果一个实体对象与某个Session实例发生了关联,并处于对应Session有效期内,那么它就处于Persistent状态。

<p style="text-align: left;">? ? ?[b]3.Detached(游离状态)[/b]

<p style="text-align: left;">?

<p style="text-align: left;">?

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

tx2.commit() ;

session. close() ;
//user对象此时状态为Detached,因为与其关联的session已经关闭

<p style="text-align: left;">?

<p style="text-align: left;">? ? ? 区别就在于Detached对象可以再次与某个Session实例相关联而成Persistent对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值