如何使用命名查询将Grails上的嵌套属性与嵌套范围的“外部”属性进行比较?

时间:2016-11-09 22:44:38

标签: grails gorm

我有一种情况需要根据对象的日期从嵌套对象中验证一系列日期。

所以我要说一个名为:

的课程
Course{
Date date
Teacher teacher
}

Teacher{
Date effectiveDate
Date terminationDate
}

我需要做的是查询另一个类的投影,并进入我需要验证日期的查询:

le 'effectiveDate', date
            or {
                ge 'terminationDate', date
                isNull 'terminationDate'
            }

问题是我无法使用日期,因为在命名查询中我没有该对象的实例。如何将嵌套对象属性与此日期进行比较?

1 个答案:

答案 0 :(得分:0)

我认为你想要的是使用createAlias。不幸的是,createAlias并没有使用Spock单元测试,因此我无法创建测试以确定是否有效且我现在没有时间创建应用来测试这个,所以这主要是猜测。

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


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

我认为我正确地反转了大于和小于比较。希望我们很幸运,这对你有用。