2011-08-11 7 views
2

http://jira.grails.org/browse/GRAILS-2803は、sqlProjectionのサポートが不足しています。それはGrails v1.2で重複していて、おそらく修正されました。しかし、 "重複した"問題はsqlRestrictionに関係しており、Grails v1.3.2以降ではsqlProjectionが実装されているとは思われません。基準ビルダー内でのsqlProjectionサポートの不足を回避しますか?

critera内でsqlProjectionを使用するための回避策はありますか?たとえば、

def results = Report.createCriteria() list { 
      projections { 
       sum('correctResponses') 
       sum('allResponses') 

       sqlProjection("(sum(correct_responses)/sum(all_responses))", ["grade"] as String[], [Hibernate.INTEGER] as Type[]) 
       groupProperty('name') 
      } 
      and { 
       if (startDate) 
        ge("date", startDate) 

       if (endDate) 
        lt("date", endDate + 1) //add one day so search is inclusive of end date 

       'in' ("id", ids) 
      } 
      order(orderColumn ?: 'name', orderDirection ?: 'asc') 
     } 

答えて

4

私は同様の問題を抱えており、別の質問に対する答えで解決策を見つけました。

この問題を回避するには、addProjectionToList()メソッドを使用します。

def results = Report.createCriteria().list { 
    projections { 
     sum('correctResponses') 
     sum('allResponses') 

     addProjectionToList(Projections.sqlProjection(
      '(sum(correct_responses)/sum(all_responses)) as grade', 
      ['grade'] as String[], 
      [Hibernate.INTEGER] as Type[] 
     ), 'sumProjection') 
     groupProperty('name') 
    } 
    and { 
     if (startDate) 
      ge("date", startDate) 

     if (endDate) 
      lt("date", endDate + 1) //add one day so search is inclusive of end date 

     'in'("id", ids) 
    } 
    order(orderColumn ?: 'name', orderDirection ?: 'asc') 
} 
を次のように、この特定の例のための基準のDSLは次のようになり

https://stackoverflow.com/a/7652787

:例えば次のような答えで「オプション2」を見てみましょう

関連する問題