我有以下域類Grails中:的Grails - 防止遞歸一個一對多的關係
class TreeNode {
String name
String description
static hasMany = [childNodes: TreeNode]
}
什麼是保證樹節點的實例,不能有自己的孩子是最地道的Grails方式?我可以在域類中作爲約束來做到這一點,還是應該在TreeNodeController的Save操作中編寫自定義代碼?
我有以下域類Grails中:的Grails - 防止遞歸一個一對多的關係
class TreeNode {
String name
String description
static hasMany = [childNodes: TreeNode]
}
什麼是保證樹節點的實例,不能有自己的孩子是最地道的Grails方式?我可以在域類中作爲約束來做到這一點,還是應該在TreeNodeController的Save操作中編寫自定義代碼?
將其作爲自定義約束。
static constraints = {
childNodes(validator: {value, obj, errors->
if(value.contains(obj) {
errors.rejectValue('childNodes', 'Cannot contain self')
}
}
}
答案取決於你想要檢查孩子的深度。如果你只是擔心眼前的孩子,那麼來自@Tiggerizzy的代碼應該可以正常工作。
另一方面,如果要驗證節點不是樹中的直接子樹或深層子樹,則應將邏輯撤出驗證並置於Grails服務類中。這將提供至少有兩個好處: