Я думаю, что причина, по которой меня немного смущает этот вопрос, заключается в том, что технически это отношения «многие ко многим», а не «один ко многим». Grails создаст таблицу соединений («a_b») для этого отношения (поскольку B не имеет отношения отношение к A).
То, как вы создали свой домен A, отношение hasMany - это набор, поэтому B будет отображаться только один раз в коллекции "bs". Итак, я полагаю, все, что вы спрашиваете, сколько у вас есть Б.
Если это так, вы можете использовать HQL для ответа на ваш вопрос (вы также можете использовать построители критериев, но я предпочитаю hql). Вот пример (использование плагина build-test-data для создания объектов с помощью buildLazy и добавление строкового имени в 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])
Результат:
Number of As that have each B = [[1, 999], [4, 888]]
Number of As with a specific B = [4]