我有一个用于查询的域类。
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”。
提前致谢。
答案 0 :(得分:0)
我不确定但是从查看你的标准和detachedCriteria查询以及错误,你可以尝试这个
detachedCriteria = detachedCriteria.build{
projections{
groupProperty('location')
countDistinct('tourId')
}
}
答案 1 :(得分:0)
对于DetachedCriteria,语法略有不同。
detachedCriteria = detachedCriteria.build{
}.projections{
property('location')
countDistinct('tourId')
}.list()