NonUniqueObjectException问题的解决------手动修改数据库的因果

Could not invoke method '***' on target object [com.****@5b787144]: nested exception is net.sf.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 2203, of class: com.*]

以上是在公司发现job运行某天没有出现数据的异常情况:

net.sf.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 2203 

这句话已经表明 数据库里 从 主键ID 为2203 开始,就已经存在不同的value值对应同一个ID 。经过查找发现,是由于之前手动插入id为2203的数据(oracle数据可自动生成id并插入,这是引发问题的关键),根据主键class为sequence生成策略,id之每次增加1,从而导致了这次数据update的错误,希望各位引以为戒,注意数据更新的方式方法。

 

引问:

1、生成策略为increment 或者 不指明id值时,是否可以避免此问题?

2、生成策略为sequence时,实现自增1,那基础数值是如何获取的?

欢迎大家对此讨论留言,谢谢。

 

 

 

参考如下转载的案例:

NonUniqueObjectException问题的解决

 

在公司做模块的时候遇到了NonUniqueObjectException 错误,

 


1. adifferentobjectwiththesameidentifiervaluewasalreadyassociatedwiththesession:
2.[com.......#1462109];
3. nestedexceptionisorg.hibernate.NonUniqueObjectException:
4. adifferentobjectwiththesameidentifiervaluewasalreadyassociatedwiththesession:
5.[com. .....#1462109]
6.

 

看错误的原因是因为针对一个对象加载了引用,由于有多个引用指向一个对象,在你去update的时候,出现了对象不同步问题,hibernate不知道要保存哪个对象,查了下原因,原来是我所做的hibernate映射在主表中对子表做映射的时候设置了lazy="false",这样主表在查取数据的时候就会相应的也把子表的数据取出来,然后在子表的编辑页面做update操作的时候就又加载了一个引用,现在去更新它的时候,hibernate就不知道更新哪个了。

解决办法,将lazy="true" 或者默认不设置即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值