Grails:加入不相关表的最佳方法是什么?

时间:2014-12-11 19:36:22

标签: grails gorm

我知道必须采用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测试吧。


1 个答案:

答案 0 :(得分:2)

如果您的C课程没有提及A的{​​{1}} s,那么我认为获取BA分开,然后组合它们可能是你唯一真正的选择。但是,我并不认为它真的那么糟糕。

如果你想确保你拥有一系列独特的B,那么这也很简单(不需要循环)。见http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#unique%28%29

e.g。

C