나는이 질문에 의해 혼란 조금 해요 이유는 기술적으로 정말 실제로는 단색 대다 관계, 아니라고 생각
다 대다. Grails는이 관계에 대한 조인 테이블 ("a_b")을 만듭니다 (B는 A에 대한 belongsTo 관계가 없기 때문에).
A 도메인을 생성하는 방식으로 hasMany 관계가 설정되므로 B는 "bs"컬렉션에만 한 번만 나타납니다. 그래서, 당신이 묻는 것은 모두 As가 B를 가지고 얼마나 많은지입니다.
사실이라면 HQL을 사용하여 질문에 대답 할 수 있습니다 (기준 작성자를 사용할 수도 있지만 hql을 선호합니다). 에
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]
나는 내가 이해 확실하지 않다 다음은 그 예 (buildLazy와 객체를 구성하는 빌드 테스트 데이터 플러그인을 사용하여 A와 문자열 이름을 추가)입니다 문제. 각 B가 속한 As의 수를 계산 하시겠습니까? –
답장을 보내 주셔서 감사합니다. A에 B가 몇 번 있었는지 알고 싶습니다. 모든 Bs에 해당합니다. – xain