Hibernate 有没有办法将此HQL转换为标准?

Hibernate 有没有办法将此HQL转换为标准?,hibernate,grails,hql,hibernate-criteria,Hibernate,Grails,Hql,Hibernate Criteria,这是我试图转换的HQL: UserRequest.executeQuery("Select ur.request from UserRequest ur where ur.user = :user and ur.request.type is null order by ur.request.dateCreated DESC", [user: user], [max: params.max?: 10, offset: params.offset?: 0]) 我尝试用下面的代码将其转

这是我试图转换的HQL:

UserRequest.executeQuery("Select ur.request from UserRequest ur 
  where ur.user = :user and ur.request.type is null 
  order by ur.request.dateCreated DESC",
[user: user],
[max: params.max?: 10, offset: params.offset?: 0])
我尝试用下面的代码将其转换为
标准
,但它给了我一个错误,
没有属性请求。找到类型

def list = UserRequest.createCriteria().list(max: params.max?: 10, offset: params.offset?: 0) {
     eq("user", user)
     isNull(request.type)
     order("request.dateCreated", "DESC")
}
转换动机

除了在使用HQL时必须编写一个单独的查询来获取总数(用于分页)之外,我想将其转换为条件的另一个原因是,我需要根据参数筛选此查询的结果。例如:

def list = UserRequest.createCriteria().list(max: params.max?: 10, offset: params.offset?: 0) {
     eq("user", user)
     isNull("request.type")

     if (params.filtertype == "color") 
       ilike("request.color", "%${params.filtervalue}%")
     order("request.dateCreated", "DESC")
}
如果我尝试使用HQL执行上述操作,它将变得更加麻烦

更新

这是我的班级结构

class User {
    transient springSecurityService
    String username
    String password
}

Class Request {
    String type
}

class UserRequest implements Serializable{
    User user
    Request request

    static mapping = {
        id composite: ['user', 'request']
        version false
    }

    //equals & hashcode

    static UserRequest create (User user, Request request, boolean flush = true) {
        def d = new UserRequest (user: user, request: request)
                d.save(flush: flush, insert: true)
    }
}

由于条件查询涉及关联,请尝试以下操作:

def list = UserRequest.createCriteria().list(max: params.max?: 10, offset: params.offset?: 0) {
     eq("user", user)
     request {
         isNull("type")
         order("dateCreated", "DESC")
     }
}
还有一种语法变体使用
createAlias()
。根据查询的最终结构,您可能会发现这更容易处理。有关更多示例,请参见此处的“查询关联”部分: