Hibernate实体对象的生命周期(三种状态详解)

Hibernate生命周期会经历三种不同的状态:
    1.Transient(瞬态):实体对象在内存是自由存在的,即与数据库中的数据没有任何关系.换句话说就是:该实体从未与任何持久化上下文关联过,它没有持久化标识.例如:  
     
  1. //创建一个Transient对象
  2.  User user=new User();
  3. user.setName("username");
  4.  user.setPassword("password");
  5.  //此时的user为一个Transient对象,因为没有与任何数据库的任何记录相关联.
     特征:
  • 与数据库中的记录没有任何关系,即没有与其相关联的数据库记录.
  • 与session没有任何关系.即没有通过session对象的实例对其进行任何持久化的操作.
    2.Persistent(持久态):该实体对象处于Hibernate框架所管理的状态,即这个实体对象与Session对象的实例相关联.例如:
  1. //创建一个Transient对象
  2. User user=new User();
  3.  user.setName("username");
  4.  user.setPassword("password");
  5.  //此时的user为一个Transient对象,因为没有与任何数据库的任何记录相关联.
  6.  Session session = sessionFactory.openSession();
  7.  Transaction tx=session.beginTransaction();
  8.  //此时的user仍为一个Transient对象
  9. session.save( user );
  10.  //此时的user为Persistent
  11.  tx.commit();
  12.  //提交后向数据库中加入一条记录.
  13.  Transaction tx2=session.beginTransaction();
  14.  user.setPassword("abc");
  15.  tx2.commit();
  16. //虽然在这个事务中没有调用Session的save()方法来保存user对象
  17. //但由于user对象处于persistent状态,所以对user所做的任何修改都将被持久
  18. //化到数据库,所以这时数据库中的密码已经变为:abc;
  19.  session.close();
    特征:
  • 每个persistent状态的实体对象都与一个session对象的实例相关联
  • 处于Persistent状态的实体对象是与数据库中的记录相关联的.
  • Hibernate会依据persistent状态的实体对象的属性变化而改变数据库中相对应的记录.
    3.Detached(游离态):对于Persistent对象,当不再与它所对应的Session对象相关联时,这个对象就是游离态.
  1.  //创建一个Transient对象
  2.  User user=new User();http://writeblog.csdn.net/PostEditPlain.aspx
  3. 个人空间—后台
  4.  user.setName("username");
  5.  user.setPassword("password");
  6.  //此时的user为一个Transient对象,因为没有与任何数据库的任何记录相关联.
  7.  Session session = sessionFactory.openSession();
  8.  Transaction tx=session.beginTransaction();
  9.  //此时的user仍为一个Transient对象
  10.  session.save( user );
  11.  //此时的user为Persistent
  12.  tx.commit();
  13.  //提交后向数据库中加入一条记录.
  14.   session.close();
  15.  //此时user为Detached 状态,此时对user所进行的任何修改,
  16.  //将不会对数据库有任何影响.

特征:
  • 游离态是由持久态实体对象转变而来的.
  • 游离态实体不再与session对象相关联.
  • 游离态实体对象与数据库中的记录没有直接联系,对其所做的任何修改将不会影响到到数据库中的数据.
  • 游离态实体对象在数据库有相对应的数据记录,如果没有被其他事务删除.


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值