2010-12-20 3 views
2

데이터에서 목록을 수신하는 데 며칠 동안 노력하고 있습니다. 도메인은 다음과 같습니다 : 나는 어떤 상태에 알파의 모든 Beta.foo의 모든 Beta.foo의 합을 가지고 싶습니다Grails 테이블 또는 목록의 추가 열

class Alpha {  
    String a 
    String b 
    etc. 
    static hasMany = [beta:Beta] 

} 

class Beta { 
    String a 
    Integer foo 
    String status 
    static belongsTo = [alpha:Alpha] 
    static constraints = { 
     status(nullable:false, inList:["val1","val2","val3", "val4"]) 
    } 
} 

. 최고는 추가 행 (Integer sumVal1 ...)과 같은 것입니다.

나는라는 이름의 시도 쿼리 :

static namedQueries = { 
     erledigterProbeAufwend { 
      createAlias ('Beta', 'b') 
      eq ('b.status', 'val1') 
      projections { 
       groupProperty('b.alpha') 
       sum('b.foo', 'sumFooVal1') 
      } 
     } 
} 

그러나 이것은 단지 한 번에 나에게 하나 개의 합계를 제공합니다.

나는 그것에 대한 도움을 얻기를 고대하고 있습니다.

인사말 바스

답변

3

formula field 계산 될 수 있지만 subquery trick 로모그래퍼 :`데프 getVal1() {beta.findAll {it.status를 [ 'A의 :

static mapping = { 
    betaCount formula: "(SELECT count(*) FROM Beta b WHERE b.alpha_id = id and b.status in('a', 'b'))" 
} 
+0

답장을 보내 주셔서 감사합니다. 그것은 잘 작동합니다 :) – Bas

+0

그것은 완벽하게 작동합니다! 다른 예제로 내 경우를 게시하고 싶습니다. 'totalFilhos formula : '(SELECT count (*) FROM atendimento where a.atendimento_pai = cod_atendimento)' ' –

+0

그리고'count (*) ' ',하지만 모든 라인, 같은 트릭과 함께? –

0

는 알파 클래스에 과도 변수를 작성하고 onLoad 이벤트에서 그들을 채 웁니다.

class Alpha {  
    String a 
    String b 
    etc. 
    static transients = ["sumVal1",...] 
    static hasMany = [beta:Beta] 

    def onLoad = { 
     sumVal1 = .... 
    }  

} 
+0

나는 알파에서 가진 더 나은 다음 의심 ','b ']}. sum()}'그리고 지연 쿼리. 어쨌든 a.beta를 검색하면 추가 쿼리가 실행됩니다. –

관련 문제