01_hibernate merge方法的理解

[size=large][color=green] merger()方法,很神奇。它可以用来将一个托管(detached)的VO(Value Object)持久化到数据库,以下是它持久化一个托管vo的步骤:
1.在持久化上下文(persist context)中查找与托管VO具有相同ID的PO(persist object),如果找到,就将托管的VO的值copy给PO,然后返回持久化以后的对象;
2.如果在持久化上下文中没有找到,它就会到数据库出找,而且是根据托管的VO提供的ID查找,然后就将托管的VO的值copy给PO,然后返回持久化以后的对象;
3.如果在数据库也没找到和托管的VO对应的记录,它就会要求new一个和托管的VO相对应的持久化对象,然后执行拷贝,返回持久化以后的对象。
注意:如果传给merge()方法的是一个游离态的(transient)对象,那么就会按照第三步执行[/color][/size]



/**
* 假设数据库已经存在ID为1的User对象
*/

//瞬时对象
User newuser = new User();

newuser.setUsername("admin2");




session.beginTransaction();

//持久化对象
User user = (User) session.get(User.class, 1);

//newuser托管对象
newuser.setId(user.getId());

//在内存中查找是否存在跟该托管对象id相匹配的对象,如果匹配,就想托管对象内容复制到内存中的对象
session.merge(newuser);

//验证一:放开下面这句话就结果还是admin2,此时newuser始终都是一个托管对象
// newuser.setUsername("admin3");




session.getTransaction().commit();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值