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

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条)

报告相同问题?