对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方法,没有报错。。但是我保存的东西完全没有成功。
公司人都走光了,空荡荡的就我一个人了。就是为了解决这个该死的问题。。看在苦逼加班的份上,谁知道的告诉我一声,不胜感激。。。
原因是当前session中已经存在一个相同标识符的po。
1、merge也能解决;
2、也可以这样:getCurrentSession()先调用下clear(清空session) 再update。
3、没有执行 可能说明你事务没起作用。
你试一下方法[code="java"]session.load(Role.class,id);[/code]
看能不能返回唯一的结果,如果不能的话可能是数据库中表与Java的Pojo类的映射关系没有设置好,导致findRoleById无法返回惟一值。也可能是Permission表的问题、。