2013-03-19 44 views
0

我有一个简单的一对多关联:GORM预先抓取集合随着标准

class Foo { 
    int id 
    Date someDate 

    static hasMany = [ 
     bars: Bar 
    ] 
} 

class Bar { 
    Foo foo 
    Date someDate 

    static mapping = { 
     ..... 
     columns { 
      foo([:]) { 
       column name: "id" 
      } 
     } 
    } 
} 

在正常情况下,调用foo.bars将返回所有的酒吧,这是很好的。但在这种情况下,我需要使用someDate参数进行查询。我需要热切地取回收藏,但我不知道如何做到这一点。我想要做这样的事情:

Foo.withCriteria { 
    eq("id", someId) 
    bars { 
     eq("someDate", ?????) 
    } 
} 

我不知道摆在了什么价值,虽然,因为它不是提前知道的,或者是否有更好的方法来做到这一点?

+0

你会把变量有??? – 2013-03-20 01:33:46

+0

@JamesKleeh我想你错过了这个问题。我想通过PK和其他日期字段加入Bars和Foo。那么在哪里“?????”是的,我不知道该怎么做才能做到这一点。 – 2013-05-20 17:40:22

回答

1

在父类中过滤列表会非常混乱。如果您设法创建foo实例,其中foo.bars只包含Bar s列表的一个子集,但诸如foo.addToBars之类的事情会出现奇怪的行为以及其他问题。

如果您只是需要找到一个属于给定Foo,由他们someDate属性过滤集Bar S的,你应该询问对Bar类开始:

Bar.findAllByFooAndSomeDate(foo, dateVal) 
Bar.findAllByFooAndSomeDateBetween(foo, startDate, endDate) 

或:

Bar.findAll() { 
    (foo.id == someId) && (someDate == dateVal) 
} 

+0

查询还有很多内容,为简单起见我简化了它。我只是试图在单个查询中填充对象图表(如果可能的话),而不是为我需要的每个集合执行多个查询过滤。我只想要根据父对象的someDate属性获取该集合。但是,你的评论是有道理的,在列表中做事情会很奇怪。 – 2013-03-28 15:20:01

+0

如果你正在填充一个复杂的图形,那么使用HQL和预测可能会更好。 – codelark 2013-03-28 15:23:19