我尝试使用CreateCriteria来获取一些id。由于ListDistinct不支持分页,我在网上找到了一个解决方案来解决这个问题。http://ondrej-kvasnovsky.blogspot.fr/2012/01/grails-listdistinct-and-pagination.html
但当我尝试用排序和顺序提取元素时,我遇到了一个例外:
在这种情况下,按表达式"THIS_DATE"排序必须在结果列表中;SQL语句:…
我的代码:
class MyClassA {
Date date
static hasMany = [userList:User]
}
class User {
String login
}
class ResponseService {
def load(offset, max ) {
def idList = MyClassA.createCriteria().list (max: max, offset: offset) {
projections { distinct ( "id" ) }
userList{
eq("login","toto")
}
order("date","desc")
}
if( idList ) {
// fetch all Responses based on selected IDs
def results = MyClassA.getAll( idList )
return results
}
}
}
问题可能是在结果中没有日期列。我还没有测试过它,但在研究了这个问题之后:这个问题的sql查询是什么?(对第一个答案的评论)我认为添加
property("date")
对你的预测会有所帮助。
----------------编辑-------------------------
这是针对您的问题的完整ResponseService课程。我还在您的投影子句中添加了property("id")
。
class ResponseService {
def load(offset, max ) {
def idList = MyClassA.createCriteria().list (max: max, offset: offset) {
projections {
distinct ( "id" )
property("date")
property("id")
}
userList{
eq("login","toto")
}
order("date","desc")
}
if( idList ) {
// fetch all Responses based on selected IDs
def results = MyClassA.getAll( idList )
return results
}
}
}