我有一种情况,我需要根据对象的日期来验证嵌套对象的日期范围。

因此,假设我有一个名为:

Course{
Date date
Teacher teacher
}

Teacher{
Date effectiveDate
Date terminationDate
}

我需要做的是一个带有另一个类的投影的查询,并且需要在查询中验证日期,如下所示:
le 'effectiveDate', date
            or {
                ge 'terminationDate', date
                isNull 'terminationDate'
            }

问题是我不能使用日期,因为在命名查询中我没有该对象的实例。如何比较该日期的嵌套对象属性?

最佳答案

我认为您想要使用createAlias。不幸的是,createAlias不适用于Spock单元测试,因此我无法创建测试以查看其是否有效,并且我现在没有时间创建一个应用程序来对此进行测试,因此这主要是猜测。

您的命名查询应如下所示:


findCoursesWithActiveTeacher { ->
    createAlias 'teacher', 't'
    geProperty 'date', 't.effectiveDate'
    or {
        leProperty 'date', 't.terminationDate'
        isNull 't.terminationDate'
    }
}

我认为我正确地进行了大于或小于然后进行比较。希望我们很幸运,这对您有用。

08-28 23:24