几天前我问了一个问题h ow to convert a HQL query to Criteria

我进行转换的动机是,我想根据用户的输入来过滤结果,而HQL中的代码确实很麻烦。标准似乎是最合适的。但是,我无法使用createAlias

使用createAlias时,我不断收到错误消息。

这是我的域类:

class User {
    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)
    }
    static constraints = {
    }
}

这是我使用createAlias的方式
  def getResults (User user) {
    UserRequest.createCriteria().list() {
      createAlias("request","req")
      eq("user", user)
      eq("req.type","Test")
    }
  }

完整的示例在GitHub上显示了问题:https://github.com/Omnipresent/createAliasTest

最佳答案

我有同样的问题,我做了这样的事情:

def getResults (User user) {
   UserRequest.createCriteria().list() {
     eq("user", user)
     request{
        eq("type","Test")
     }
   }
}

编辑:
检查您的UserRequest域,您有:
Request request

static hasMany = [user: User, request: Request]

您具有相同名称“request”的Request和UserRequest之间的1:1和1:N关系

10-05 21:30