无法计算"计算"和" groupBy"与Grails DetachedCriteria

时间:2014-05-04 20:30:29

标签: hibernate grails detachedcriteria

我有一个用于查询的域类。

TourIndex{
     Long tourId
     String country
     String location
     int availability
     // ... more fields
}

我们使用一系列“动态”标准构建器进行搜索,这些构建器基于一系列基本上导致执行的配置:

def detachedCriteria = new DetachedCriteria(TourSearchIndex)

detachedCriteria = detachedCriteria.build { eq('country','AR') }
detachedCriteria = detachedCriteria.build { eq('location','salta') }

我想重新利用这个逻辑,并以

的形式获得各自结果的可用过滤器
[['location1', '3'], ['location2', '5']]

我最疯狂的猜测是:

detachedCriteria = detachedCriteria.build{
  projections{
    property('location')
    countDistinct('tourId')
  }
}

但这会导致非常明显的错误

Caused by: org.h2.jdbc.JdbcSQLException: Column "THIS_.LOCATION" must be in the GROUP BY list; SQL statement:
select this_.location as y0_, count(distinct this_.tour_id) as y1_ from tour_search_index this_ where this_.country=? [90016-173]

根据How to Group property in Order Clause using Grails Criteria

,使用createCriteria我可以让计数区别开来
def criteria = TourSearchIndex.createCriteria()

def result = criteria.list {
  projections{
    groupProperty('location')
    countDistinct('id','idDistinct')
  }
  order('idDistinct','desc') 
}

但我想使用已经使用应用程序其余部分的DetachedCriteria,是否有解决方法?我认为缺少的是DetachedCriteria内部类中DetachedProjection中的“groupProperty”。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我不确定但是从查看你的标准和detachedCriteria查询以及错误,你可以尝试这个

detachedCriteria = detachedCriteria.build{
  projections{
    groupProperty('location')
    countDistinct('tourId')
  }
}

答案 1 :(得分:0)

对于DetachedCriteria,语法略有不同。

detachedCriteria = detachedCriteria.build{

}.projections{
    property('location')
    countDistinct('tourId')
}.list()