我知道必须采用GORMy的方式来做到这一点。
class A {
def foo
C c
}
class B {
def bar
C c
}
class C {
def x
def y
def z
}
我想把所有的C都放在A.foo ==' foo'以及B.bar ==' bar'。
我知道我可以从一个或另一个父类中做到这一点,例如:
def my_cs = A.withCriteria { eq('foo', 'foo') }*.c
...我可以分别抓住我所有的B,其中bar ==' bar'并循环遍历my_cs ...但这似乎效率低下,我觉得必须有一个合理的方法来通过标准语法来完成它。
这是可能的,还是有其他可接受的方法呢?
感谢。
--------解决方案----------
A.withCriteria {
createAlias('c.B', 'cb', CriteriaSpecification.LEFT_JOIN)
eq('foo', 'foo')
isNull('cb.c')
projections {
property 'c'
}
}
我发现我不需要为B测试吧。
答案 0 :(得分:2)
如果您的C
课程没有提及A
的{{1}} s,那么我认为获取B
和A
分开,然后组合它们可能是你唯一真正的选择。但是,我并不认为它真的那么糟糕。
如果你想确保你拥有一系列独特的B
,那么这也很简单(不需要循环)。见http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#unique%28%29
e.g。
C