我有两个域类
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)
}
}
问题
如何编写一个方法来获取用户的所有请求,并考虑max
和offset
进行分页,然后返回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
我该如何解决这个问题?
答案 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])