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

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

相关推荐 更多相似问题