诡异的Session.merge()

还是Hibernate……

有两个实体类:A和B,双向多对多映射。属主类是A。

当向A的一个对象a添加——到B对象的若干实例的映射,并用Session.merge(a)持久化时,一切正常。

而向B的一个对象b添加——到A对象的若干实例的映射,并用Session.merge(b)持久化时,却没有任何反应。

两段代码几乎完全一样,效果却不同。于是想到了是不是Session.merge()带有数据完整性检查。于是在Session.merge(b)之后,又遍历了与b映射的所有A的实例并持久化。结果……可耻的失败了……映射关系仍然没得到保存。

静下心来仔细想了想,难道说在Session.merge(b)之后,Transaction.commit()之前,Hibernate就已经对数据库进行了完整性检查?因为属主类里的数据没变,所以Session.merge(b)的时候就把更新的映射关系当成废品抛弃了??

继续试验,把遍历操作放到Session.merge(b)之前。惊奇的发现,竟然保存上了。

无语啊……还好映射关系不多。要是多的话……遍历操作……岂不败了……诡异的Session.merge()……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值