如何在HQL中连接两个表来获取一个域类的结果

时间:2014-09-28 15:17:37

标签: hibernate grails gorm

我有两个域类

class User {
    transient springSecurityService
    String username
    String password
}

Class Request {
    String type
}

我按照Burt推荐的单独课程加入了这两个课程

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

问题

如何编写一个方法来获取用户的所有请求,并考虑maxoffset进行分页,然后返回List<Request>

我尝试了什么

static List<Request> getAllRequestForUser(User user, params) {
    Request.findAll "from Request a , UserRequest b 
     where b.user = :userId and 
           a.id = b.request.id and  
           a.type = :foo",
    [foo: "BAR",userId: user.id],
    [max: params.max?: 10, offset: params.offset?: 0]
}

如您所见,我希望返回List<Request>,以便在我的列表页面中我可以执行以下操作:

<g:each in="${requestList}" status="i" var="requestInstance">
            <tr>
                <td>${requestInstance.type}</td>
            </tr>
</g:each>

问题

但是,我无法访问属性type,因为列表中返回的对象的类型为Object,而不是Request

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您无需告诉Hibernate如何加入,已在启动时配置:

static List<Request> getAllRequestForUser(User user, params) {
   UserRequest.executeQuery(
      'select ur.request from UserRequest ur ' +
      'where ur.user=:user and ur.request.type=:type',
      [type: 'BAR', user: user],
      [max: params.max?: 10, params.offset?: 0])
相关问题