2010-12-20 8 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') 
      } 
     } 
} 

しかし、これだけ一度に私に1点の合計を与えます。

私はそれについていくつかの助けを得ることを楽しみにしています。

挨拶 バ

答えて

3

これはformula fieldを計算することができますが、subquery trickで: `デフgetVal1(){beta.findAll {it.statusを[ 'で:

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 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()} 'を実行し、それを遅延クエリします。とにかく追加のクエリを実行します。 –

関連する問題