我遇到这种情况:
country {
and {
rates{
and{
between('effectiveDate', startDate, endDate)
or {
and {
eq('hoursEligible', true)
gt('hours', new BigDecimal(0))
}
and {
eq('travelTimeEligible', true)
gt('travel', new BigDecimal(0))
}
and {
eq('mileageEligible', true)
gt('mileage', new BigDecimal(0))
}
and {
eq('expensesEligible', true)
gt('expenses', new BigDecimal(0))
}
}
}
}
}
}
事情是:hours是特定类的属性,具有此命名查询的类。而rate是一个嵌套在我特定类的嵌套对象之一的列表。 当我尝试使用它时,我得到了:
java.lang.IllegalArgumentException: object is not an instance of declaring class
如何使用此命名查询引用hours属性? 还有一个问题......如果费率列表中的任何项目对于此条件返回true,它将返回true,对吗?
这是我的域类:
class TravelDetail {
Date date
Country country
BigDecimal hours
BigDecimal mileage
BigDecimal travel
BigDecimal expenses
进入我所拥有的国家:
class Country {
static hasMany = [rates: Rate
进入Rate我有:
class Rate {
Boolean hoursEligible = Boolean.TRUE
Boolean travelTimeEligible = Boolean.TRUE
Boolean mileageEligible = Boolean.TRUE
Boolean expensesEligible = Boolean.TRUE
答案 0 :(得分:0)
将每个rate
中的and
条件拆分,类似这样,
country {
and {
between('effectiveDate', startDate, endDate)
or {
and {
rates {eq('hoursEligible', true)}
gt('hours', new BigDecimal(0))
}
.
.
and {
rates {eq('expensesEligible', true)}
gt('expenses', new BigDecimal(0))
}
}
}
}
答案 1 :(得分:0)
我不认为,我会采用像你这样的模型,但通常查询应该是这样的(假设你在TravelDetails
上调用它):
def list = TravelDetail.withCriteria{
between 'effectiveDate', startDate, endDate
or {
and {
country{ rates { eq 'hoursEligible', true } }
gt 'hours', 0
}
....
}
}