如何在Grails中对域类中的关系施加约束?

时间:2012-02-24 05:56:52

标签: grails groovy constraints grails-domain-class grails-validation

我有一个像这样的域名三个域类:

Tasks.groovy

class Tasks {
    static belongsTo = [ user : User ]
        //other fields
    Date startDate
    Date endDate
}

User.groovy

class User {
    //relationships. . . .
    static belongsTo = [ company : Company, role : Role, resource : Resource]
    static hasMany = [ holidays : Holiday, tasks : Tasks]
    //other fields
    }

Holiday.groovy

class Holiday {
    static belongsTo = User
    Date startDate
    Date endDate
    //other fields
}

现在,当我创建一个Tasks实例时,我想设置一个约束,使Tasks startDateendDate不属于User } Holiday s startDateendDate。如果它有抛出和错误。

我想要一种方法将此约束放在我的域类本身上(即Tasks)。

是否可以这样做?

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用自定义验证程序完成此操作。

startDate(validator: {val, obj->
    obj.user.holidays.every{holiday-> val <= holiday.startDate || val >= holiday.endDate }
})

您可以将自定义验证逻辑封装为闭包。您还必须为endDate添加类似的逻辑。

答案 1 :(得分:0)

我会选择在User域中使用createTask函数,因为Task不应该摆弄迄今为止删除的变量(self - &gt; User - &gt; Holiday - &gt; startDate)。< / p>

很明显,用户知道假期何时开始和结束,因此可以轻松验证新任务的给定开始和结束日期。