嵌套的findAllBy *

时间:2011-12-19 22:04:45

标签: hibernate grails

我有3个域类:

class Contract {

    String referenceNumber

    static belongsTo = [subCategory:SubCategory]
}

class SubCategory {

    String name

    static belongsTo = [category:Category]
    static hasMany = [contracts:Contract]
}

class Category {

    String name

    static hasMany = [subCategories:SubCategory]
}

我想查找属于给定类别的所有合同(因此获取给定类别的所有子类别,然后获得所有这些子类别的所有合同)。这就是我试过的:

Contract.findAllBySubCategory(SubCategory.findAllByCategory(Category.get(1)))

但它一直给我一个错误:

  

groovy.lang.MissingMethodException:没有方法签名:   Contract.findAllBySubCategory()适用于参数类型:   (java.util.ArrayList)值:[[SubCat01,SubCat02,SubCat03]]   可能的解决方案:findAllBySubCategory(java.util.List)

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:3)

JamesA的答案是正确的,只是为了完整起见我还想说这似乎适合于标准查询

Category category = Category.get(1)
List<Contracts> contracts = Contract.createCriteria.list {
  subCategory {
    eq('category', category)
  }
}

答案 1 :(得分:2)

findAll动态查找程序返回一个列表,但默认情况下需要一个标量参数。尝试使用InList比较器。

Contract.findAllBySubCategoryInList(SubCategory.findAllByCategory(Category.get(1)))