2010-06-14 6 views
0

많은 관계가있는 두 개의 관련 테이블이 있습니다 : RolePermission입니다. 조인 테이블은 RolePermission입니다.NonUniqueObjectException이 조인 된 테이블을 저장할 때

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

역할과 권한 모두 DB에 이미 존재, 그 테이블의 각을. 나는 관계 테이블에 레코드를 추가하려면, 그 역할과 권한에 모두를 가리 킵니다 :

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] 

누군가가 무엇을 problen 말해 줄래? 내가 뭘 잘못 했니?

+0

addObjectEntryPermissionRole 메서드는 어떤 모양입니까? 역할 또는 권한 개체가 분리되어 있습니까 (다른 최대 절전 모드 세션에서 가져 왔습니까?)? – Thierry

+0

두 코드 조각을 이해할 수 없습니다. 둘 다 부르니? 또한,'addObjectEntryPermissionRole'의 내용은 무엇입니까? –

답변

0

같은 문제가있었습니다. cascade = { CascadeType.ALL }을 제거하면 문제가 해결되었습니다.

관련 문제