hibernate - 为什么createAlias在连接两个域的域上不起作用?

标签 hibernate grails

几天前我问了一个问题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关系

关于hibernate - 为什么createAlias在连接两个域的域上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26683678/

相关文章:

grails - 确定域对象是否持久

grails - grails更新收藏夹onclick

jquery - Grails 2.4.4 中 jQuery 插件的路径问题

Grails Controller 重定向和 SEO

java - DBUnit 在 H2 表中插入时间戳默认值解析错误

mysql - 如何创建具有 OnetoMany 和 ManytoOne 关系的实体?

hibernate - 从 1.4.200 更新到 2.1.212 后 H2 自动增量不起作用

java - 事务中的 org.hibernate.LazyInitializationException

java - 错误 500 : org. hibernate.HibernateException:未找到当前线程的 session

grails - 使用jQuery Mobile的Grails GSP页面片段链接问题