对多个关联使用创建条件

时间:2015-09-16 07:58:58

标签: hibernate grails groovy createcriteria

通过使用status attribut值并从ClassA实例开始,从ClassD实例获取name attribut值的最有效解决方案是什么?

我可以在每个列表中使用on循环,但我认为使用创建条件

有更好的解决方案
Class ClassA {
    static hasMany = [CLassBList:ClassB]
}


Class ClassB {
   static hasMany = [CLassCList:ClassC]
   static belongsTo = [ClassA]
}


Class ClassC {
    static hasMany = [CLassDList:ClassD]
    static belongsTo = [ClassB]
 }


Class ClassD {
    String name
    String status
    static belongsTo = [ClassC]
}

1 个答案:

答案 0 :(得分:1)

假设您(虽然您的代码没有提到它)您在要搜索的ClassA上有一些标准,那么您可以使用如下的createCriteria:

def c = ClassD.createCriteria()
def results = c.list () {
  projections { property('status') }
  classC {
    classB {
      classA {
        eq('classAProperty', someClassAValue)
      }
    }
  }
}

如果您只期望1个结果,请使用.get()而不是.list(),那么您可能还需要order()子句。

如果您想要返回整个ClassD,请删除投影,然后根据需要进行处理。