【发布时间】:2014-06-21 02:10:30
【问题描述】:
我有一个用于查询的域类。
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”。
提前致谢。
【问题讨论】:
标签: hibernate grails detachedcriteria