2

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

任务.groovy

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

用户.groovy

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

假日.groovy

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

现在,当我创建一个Tasks实例时,我想设置一个约束,使Tasks startDateandendDate不属于User' HolidaysstartDateendDate。如果有,则抛出和错误。

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

有可能这样做吗?

提前致谢。

4

2 回答 2

2

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

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

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

于 2012-02-24T10:37:18.030 回答
0

我会createTask在 User 域中使用一个函数,因为 Task 不应该摆弄到目前为止已删除的变量(self -> User -> Holiday -> startDate)。

很明显,用户知道假期的开始和结束时间,因此很容易验证新任务的给定开始和结束日期。

于 2012-02-24T06:17:05.403 回答