Hibernate学习笔记 merge()方法--add对象

merge

add操作


背景:
    Account 和 Group 两个对象,设置了双向的many-to-many关系,lazy=true
    不使用open session in view 模式
    不使用hibernate二级缓存

    考虑web应用场景,设置account和group关联时,只需要group和account的id就够了。
    数据库中存在两个group: 1.administrators, 2.engineers
    而po对象中,group信息为:1.invalid, 2.any one


代码A:

   其中,为po设置了两个group

输出结果:

 

代码B:


输出结果:
  


结论:

 1. merge()方法会导致执行查询group对象的select语句,在调用merge()命令时立即执行(条件:目标group对象没有被缓存)

 2. 无论merger()或save()方法,insert语句都在最后执行,并非在调用相应命令时立即执行

 3. 直接调用merge()方法时,会返回一个新的instance,原po保持不变

 4. save()之后,po中的group对象并没有被关联到session,因此查询group(id=1)会触发select语句

 5. save()之后,po对象被关联到session,再次查询,不会触发select语句,并且不会检查group对象是否被关联到session

 6. save()之后再调用merge,返回的是同一个instance,但其关联group对象会被更新

    如果在add一个对象之后,如果存在关联对象,并且需要再同一个hibernate session中进行回显,则建议使用merge()方法。

参考:
    Hibernate Session.merge() javadoc
    open session in view 模式

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值