年华是封无效信 2012-08-16 19:40
浏览 332
已采纳

org.hibernate.NonUniqueObjectException

对hibernate不太懂,做修改的时候遇到一个问题。
[code="java"]
final Role role = this.roleService.findRoleById(id);
role.getPermissions().clear();
if (permissionIds != null)
for (final int i : permissionIds)
role.addPermission(permissionService.findPermissionById(i)); //这里重新填充Permission

    roleService.updateRole(role);//执行这里的时候报错

[/code]
Role和Permission为一对多 Role里面有个Set
看update()的代码
[code="java"]@Transactional
public void update(T entity) {
Session session = getCurrentSession(); //getCurrentSession
session.update(entity);

}[/code]

google了一大堆,许多人说用session.merge()。。。我试了merge方法,没有报错。。但是我保存的东西完全没有成功。

公司人都走光了,空荡荡的就我一个人了。就是为了解决这个该死的问题。。看在苦逼加班的份上,谁知道的告诉我一声,不胜感激。。。

  • 写回答

2条回答 默认 最新

  • jinnianshilongnian 2012-08-18 11:17
    关注

    原因是当前session中已经存在一个相同标识符的po。

    1、merge也能解决;
    2、也可以这样:getCurrentSession()先调用下clear(清空session) 再update。

    3、没有执行 可能说明你事务没起作用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用