Je pense que la raison pour laquelle je suis un peu confus par cette question est que, techniquement, il est en fait un grand nombre à plusieurs, pas vraiment de un trop. Grails crée une table de jointure ("a_b") pour cette relation (car B n'a pas de relation belongsTo avec A).
La façon dont vous avez construit votre domaine A La relation hasMany est un ensemble, donc B n'apparaîtra qu'une seule fois dans la collection "bs". Donc, je crois, tout ce que vous demandez est combien ont un B.
Si c'est vrai, vous pouvez utiliser HQL pour répondre à votre question (vous pouvez également utiliser des générateurs de critères, mais je préfère hql). Voici un exemple (en utilisant le plug-in build-test des données pour construire des objets avec buildLazy et en ajoutant un nom de chaîne à A):
def a1 = A.buildLazy(name: "one")
def a2 = A.buildLazy(name: "two")
def a3 = A.buildLazy(name: "three")
def a4 = A.buildLazy(name: "four")
def b1 = B.buildLazy(code: 888)
def b2 = B.buildLazy(code: 999)
a1.addToBs(b1)
a2.addToBs(b1)
a3.addToBs(b1)
a4.addToBs(b1)
a1.addToBs(b2)
println "Number of As that have each B = " +
A.executeQuery("select count(b), b.code from A as a join a.bs as b group by b.code")
println "Number of As with a specific B = " +
A.executeQuery("select count(*) from A as a join a.bs as b where b = :b", [b: b1])
résultats dans:
Number of As that have each B = [[1, 999], [4, 888]]
Number of As with a specific B = [4]
Je ne suis pas sûr que je comprends la question. Vous voulez compter le nombre de A auquel appartient chaque B? –
Merci pour votre réponse; Je veux savoir combien de fois un B est présent dans A. Ceci pour tous les Bs. – xain