2010-06-14 26 views
0

我有兩個相關的表在多對多關係:RolePermission。連接表是RolePermissionNonUniqueObjectException保存連接表

Role對象具有權限列表。它看起來像這樣:

private Set<Permission> Permissions;  

@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }) 
@JoinTable(name = "permission_role", joinColumns = @JoinColumn(name = "role_id"), 
      inverseJoinColumns = @JoinColumn(name = "permission_id")) 
public Set<ObjectPermission> getObjectPermissions() { 
    return objectPermissions; 
} 

在一定的時候,我想的權限添加到角色:

role.getObjectPermissions().add(permission); 
roleDAO.saveOrUpdate(role); 

無論是角色和權限在數據庫中已經存在,每一個在其表。我想將記錄添加到關係表,將在角色和權限都指向:

role.addObjectEntryPermissionRole(permission); 
roleDAO.saveOrUpdate(role); 

的問題是,它看起來像它試圖挽救自己的權限!然後它拋出這個錯誤:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.XXX.model.Permission#11] 

有人可以告訴我什麼是問題?我做錯了什麼?

+0

什麼addObjectEntryPermissionRole方法看起來像? Role或Permission對象是否被分離(你是否在另一個hibernate會話中獲得它們?)? – Thierry 2010-06-14 09:42:03

+0

我不明白這兩個代碼片段。你打電話給他們兩個嗎?另外,addObjectEntryPermissionRole的內容是什麼? – 2010-06-14 18:08:21

回答

0

我有同樣的問題。正在刪除cascade = { CascadeType.ALL }解決了該問題。