这是我正在使用的域类:
class Foo {
String name,
type
static hasMany = [ bars: Bar ]
List bars
static mapping = {
bars lazy:false
}
}
class Bar {
String value
static belongsTo = Foo
}
我编写了一些Criteria查询,以便为用户提供查询界面。界面提供下拉列表以选择Bar的特定值。当用户尝试为Bar类指定值并希望获取相关的Foos时,会发生此问题。这是Criteria查询:
def query = {
and {
if (params.name && params.name != '') {
ilike('name', "%${params.name}%")
}
if (params.type && params.type != '') {
ilike('type', "%${params.type}%")
}
if (params.value && params.value != '') {
bars {
eq("value", params.value)
}
}
}
}
def results = Foo.createCriteria().list(params,query)
基本上,看起来正在发生的事情是,只有与Foo对象一起返回与指定值匹配的Bars,即使Foo对象具有与该对象不匹配的其他Bars。我希望它返回所有的条形码,因为我正在查询Foo的匹配条形。
有什么想法吗?需要进一步澄清吗?
答案 0 :(得分:1)
根据grails guide,您的查询看起来很好。
我在Foo
对象中看到了问题。尝试删除List bars
。与Bar
的关系已定义为static hasMany = [ bars: Bar ]
。
我会从grails guide开始。实施他们的例子。然后尝试将其更改为我的解决方案一步一步。你会看到问题所在。