我有我的想法是一個簡單的hasMany的關聯 - 一個用戶組的用戶的hasMany和用戶組的用戶擁有:Grails 3 beforeInsert()不停止關聯插入?
class UserGroup {
String name
User owner
Set members = []
static hasMany = [members: User]
...
}
精細至今。我想的名字是每個業主唯一的,所以最初把約束的名字:
name unique: 'owner'
然而,這也防止了同一名稱的更新。讓我感動的約束beforeInsert和expicitly執行邏輯:
def beforeInsert() {
boolean existing = false
UserGroup.withNewSession {
existing = UserGroup.where {
owner == this.owner && name == this.name
}.count() > 0
}
if (existing) {
this.errors.rejectValue(...)
}
return !this.hasErrors()
}
當保存所有的成員一個新的用戶組對象,beforeInsert的推移,我看到了休眠行動a)將用戶組則b)插入成員。
當使用成員保存新的UserGroup對象,並且由於名稱重複而導致beforeInsert失敗時,我只能看到用於插入成員的休眠操作。當然,這是因爲沒有父記錄。
我做錯了什麼,或者是真的,beforeInsert只是殺死部分save()操作而不是整個事情?那該怎麼辦?
回答時,我不應該需要任何特殊的代碼,因爲(正確)發佈的更新不會違反唯一性約束。所以問題已經消失,但我認爲beforeInsert()的行爲仍然存在疑問。 – Jay
使用成員保存新的UserGroup對象時,beforeInsert由於重複的名稱而失敗,這當然會失敗,因爲沒有父記錄。......爲什麼沒有父項?是因爲它被beforeInsert抓到了,就像你所說的那樣,它是一個「重複」的東西。不確定您目前的問題是否有任何價值。因爲即使它有父母,它不能因爲它是一個重複它不得不回滾兩個表,而不是1,因爲現在 – Vahid