Hibernate三态的代码范例

hibernate 实体对象的生命周期主要分为三个状态,Transient(瞬态),Persistent(持久态),Detached(游离态)。
  1.Transient(瞬态) 表示该实体对象在内存中是自由的,也就是说和数据库没有任何关系。
  //创建一个瞬态对象
  User user = new User();
  user.setName(userName);
  user.setPassword("test");
  //user仍是一个瞬态对象

  2.Persistent(持久态) 是指该实体对象处于Hibernate框架所管理的状态,也就是说这个实体对象与session对象的实例相关。
    处于持久太的实体对象最大的特征是对其所做的任何变更操作都将被Hibernate持久化到数据库层。
  //创建一个瞬态对象
  User user = new User();
  user.setName(userName);
  user.setPassword("test");
  //user仍是一个瞬态对象

Session session = sessionFactory.openSession();
Tansaction tx = session.beginTansaction();
//此时user仍是一个瞬态对象
session.save(user);
//此时user已变为持久态
tx.commit();

Tansaction tx2 = session.beginTansaction();
user.setPassword("pdw");
tx2.commit();
//虽然在这个事物中并没有调用session的save()方法来保存user对象,但是usr处于持久太,
//所以对user对象所做的任何修改都持久化到数据库中   ---------持久态自动更新
//那么数据库中的密码也变成了pdw

session.close();

另一种方法直接得到持久态的对象:

Session session = sessionFactory.openSession();
Tansaction tx = session.beginTansaction();
User user = (User) session.load(User.class,"key");   ------相当于hql  从DB读出来的 当然是持久态
//user对象已是持久太对象
tx.commit();
session.close();

3.Detached(游离态)是指处于持久态的对象,当不再与他所对应的Session对象向关联时,这个对象就变成游离态了。

//创建一个瞬态对象
  User user = new User();
  user.setName(userName);
  user.setPassword("test");
  //user仍是一个瞬态对象

Session session = sessionFactory.openSession();
Tansaction tx = session.beginTansaction();
//此时user仍是一个瞬态对象
session.save(user);
//此时user已变为持久态
tx.commit();
session.close();      clear()   evict()  3种变游离态
user对象已经变成游离态

session close完后,对象就变成游离态。

update():

一个PO脱离Session之后,还能保持状态,再进入一个新的Session之后,就恢复状态管理的能力,但此时状态管理需要使用session.update()   新Session也不知道PO在外面做了哪些变化 一定要显式调用s.update()  通知Hibernate,cat对象已经修改了,你必须得赶快制作并发送update的sql了

saveOrUpdate()

public void addMate(Cat cat, Mate mate) {   //这里传来两个参数  cat需要cat.setMate() 
Session session = ...;                                       cat兴许是new出来传过来的 暂态(save)     
Transacton tx = ...;                                               兴许是DB查出来传过来的  游离态(update)
session.saveOrUpdate(cat);
cat.addMate(mate);
tx.commit();
session.close();
};


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hippoppower/archive/2009/09/28/4612804.aspx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值