2011-12-19 4 views
1

J'ai 3 classes de domaine:Nested findAllBy *

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] 
} 

Je veux trouver tous les contrats qui appartiennent à la catégorie donnée (ainsi obtenir toutes les sous-catégories pour la catégorie donnée et obtenir tous les contrats pour tous ces sous-catégories). Voilà ce que j'ai essayé:

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

mais il continue à me donner une erreur:

groovy.lang.MissingMethodException: No signature of method: Contract.findAllBySubCategory() is applicable for argument types: (java.util.ArrayList) values: [[SubCat01, SubCat02, SubCat03]] Possible solutions: findAllBySubCategory(java.util.List)

Est-ce que quelqu'un sait ce que je fais mal?

Répondre

2

Le finder dynamique findAll renvoie une liste mais attend un paramètre scalaire par défaut. Essayez d'utiliser le comparateur InList.

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

La réponse par JamesA est correcte, juste pour être complet, je voudrais aussi dire que cela semble adapté à une requête de critères

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