为什么createAlias不能在连接两个域的域上工作?

时间:2014-10-31 21:30:10

标签: hibernate grails

几天前我在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

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我做了类似的事情:

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

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

Request request

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

Request和UserRequest之间有一个1:1和1:N的关系,名称为“request”