【发布时间】:2015-02-26 11:53:51
【问题描述】:
我有一个域结构,如下所示
class Parent {
static hasMany = [childs:Child]
}
class Child {
int gender
string height
}
现在,我想获取所有父母的名单,他们有一个男孩(性别 = 1),身高低于 '180' 厘米并且 一个女孩(性别 = 2),身高超过 ' 150 厘米高。
我尝试了如下给出的标准
def criteria = Parent.createCriteria()
def parents = criteria.list() {
childs {
and {
and {
eq("gender", 2)
ge("height", 150)
}
and {
eq("gender", 1)
le("height", 180)
}
}
}
}
}
但它返回一个空列表,尽管有有效数据。
【问题讨论】:
-
如果
height是您域的String属性,则不能使用ge或le将其作为数字进行比较。这将进行String比较。 -
@JoshuaMoore 但 srting 比较工作正常.. 即:如果我选择男孩的情况,它工作正常,但查询女孩和男孩都会得到空的结果。
-
那是因为您的查询正在尝试匹配具有单个子记录的父记录,该记录具有性别 2 和性别 1。永远不会出现这种情况。您需要运行两个查询,一个查找男孩,一个查找女孩,然后获得两者之间的唯一列表。此类问题已在 stackoverflow 上多次提出。
-
@JoshuaMoore 好的,这是解决方案之一,但我还需要在检索整个数据之前检索具有这种情况的父母的数量,因为数据可能有数千个。实际上如何找到计数?
-
@AnIshA,是否可以发布生成查询?
标签: oracle hibernate grails grails-orm