2014-09-18 417 views
0

我使用彈簧安全,並具有以下實體:用戶,角色和UserRole,如果我沒有錯誤是默認的。此外,我有這被稱爲員工額外的實體,它擁有用戶的列表:棘手gorm級聯刪除

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

UserRole的樣子:

class UserRole implements Serializable { 

    User user 
    Role role 
    ... 
} 

這個實體是多對多的表來表示。 當我刪除員工時,我想刪除所有與員工關聯的用戶。所以爲此我添加了cascade:「all」。但是我不能刪除用戶,也不要刪除與他相關的角色,因爲我有很多表。現在我有一個特殊的代碼。也許它在某種程度上可能與UserRole實體中的級聯一起實現,但對於我來說,並不清楚如何因爲UserRole具有非常奇怪的結構(但它的虛擬實體)。有人可以幫我解決這個問題嗎?謝謝。

回答

2

如果您想要刪除員工以便與員工關聯的用戶級聯,您可以通過將地圖投標並使員工成爲所有者來實現此目的,例如,

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

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

如果您不能定義UserUserRole之間的關係類似,然後添加以下到User類,以確保相關UserRole實例與擁有他們User實例一起被刪除:

def beforeDelete() { 
    User.withNewSession { 
     UserRole.findAllByUser(this)*.delete() 
    } 
}