我有一种情况,我需要根据对象的日期来验证嵌套对象的日期范围。
因此,假设我有一个名为:
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'
}
}
我认为我正确地进行了大于或小于然后进行比较。希望我们很幸运,这对您有用。