【问题标题】:grails use order on createcriteriagrails 在 createcriteria 上使用顺序
【发布时间】:2013-07-13 19:14:09
【问题描述】:

我尝试使用 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
    }

  } 
}

【问题讨论】:

    标签: grails pagination createcriteria


    【解决方案1】:

    问题可能是您的结果中没有日期列。 我还没有测试过,但是在看了这个问题之后:What is the sql query for this?(对第一个答案的评论)我认为添加

    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
            }
    
        } 
    }
    

    【讨论】:

    • 使用“property("date")" 我也不例外,但是,我获取的列表包含日期且没有 ID。我没有精确,但我想要一个按日期排序的 id 列表。
    • 我不明白…… 1. CP是什么? 2. 为什么你的 id 不是唯一的...? 3. 如果您的 id 不是唯一的,则意味着相同的 id 可能有几个不同的日期。那么你想按哪一个排序?
    • 抱歉我的第二个和第三个问题。他们很愚蠢。我没有注意到您正在连接来自两个表的数据。我修改了我的答案。所以现在它应该适合你了。
    • 但我不明白为什么投影只返回列表中的最后一个属性。你可以在这个问题中找到类似的问题:CreateCriteria with projections does not select all columns; Grails Projections not returning all properties and not grouped
    • 在 grails JIRA 中你也可以找到这个问题:GRAILS-10072
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多