2014-09-18 5 views
0

스프링 보안을 사용하고 있으며 다음 엔티티가 있습니다. 사용자, 역할 및 내가 잘못하지 않는 UserRole이 기본값입니다. 나는 직원이라 별도의 법인을 가지고 있으며 사용자의 목록 소유 외에 :까다로운 웜 캐스케이드 삭제

class Employee { 
    static hasMany = [users: User] 
    users cascade: "all" 
    ... 
} 

UserRole은 다음과 같습니다

class UserRole implements Serializable { 

    User user 
    Role role 
    ... 
} 

을이 개체가 많은 테이블에 많은으로 표시됩니다. Employee를 삭제할 때도 Employee와 관련된 모든 사용자를 삭제하려고합니다. 그래서이 목적을 위해 캐스 캐 이드를 추가했습니다 : "모두". 하지만 나는 많은 테이블을 가지고 있기 때문에 사용자를 삭제할 수 없으며 그와 관련된 역할을 삭제하지도 않습니다. 지금은 특별한 코드가 있습니다. UserRole 엔티티에서 캐스 캐 이드를 사용하는 것이 가능할 수도 있지만 UserRole이 꽤 이상한 구조를 가지고 있기 때문에 분명하지 않습니다. 누군가 제발 도와 드릴까요? 고맙습니다.

답변

2

직원과 관련된 사용자에게 연결을 삭제하려는 경우 매핑을 bidrectional로 설정하고 직원을 소유자로 지정하면됩니다.

def beforeDelete() { 
    User.withNewSession { 
     UserRole.findAllByUser(this)*.delete() 
    } 
} 
: 당신이 유사 UserUserRole 사이의 관계를 정의 할 수없는 경우

class Employee { 
    static hasMany = [users: User] 
} 

class User { 
    static belongsTo = [employee: Employee] 
} 

는, 그 관련 UserRole 인스턴스를 소유하는 User 예와 함께 삭제됩니다 수 있도록하여 User 클래스에 다음을 추가