【发布时间】:2021-01-06 08:05:12
【问题描述】:
我可以使用这个 JPQL 查询来创建我的自定义 DTO:
@Query("SELECT new com.mycompany.dto.UserDetailsDTO(vu.id, ru.active, ru.firstname, ru.lastname, ru.username, vu.logins, ru.email, COUNT(li.creator)) "
+ "FROM User vu inner join RemoteUser ru on vu.remoteUser = ru.username "
+ "inner join Item li on li.creator = vu.id "
+ "group by li.creator, ru.active, ru.firstname, ru.lastname, ru.username, vu.logins, vu.id, ru.email")
List<UserDetailsDTO> getAllUsers();
现在我想在上面的查询中添加order by、ASC/DESC、limit、offset,以获取基于动态参数的结果,如下所示:
@Query("SELECT new com.mycompany.dto.UserDetailsDTO(vu.id, ru.active, ru.firstname, ru.lastname, ru.username, vu.logins, ru.email, COUNT(li.creator)) "
+ "FROM User vu inner join RemoteUser ru on vu.remoteUser = ru.username "
+ "inner join Item li on li.creator=vu.id "
+ "group by li.creator, ru.active, ru.firstname, ru.lastname, ru.username, vu.logins, vu.id, ru.email "
+ "order by = :orderBy :orderDir and offset = :pageNo and limit = :pageSize")
List<UserDetailsDTO> getAllUsers(@Param("pageNo") int pageNo,
@Param("pageSize") int pageSize,
@Param("orderDir") String orderDir,
@Param("orderBy") String orderBy);
但它不起作用,错误是:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: = near line 1, column 427
已经尝试将 pageable 作为参数传递:
Page<UserDetailsDTO> getAllUsers(Pageable pageable)
并准备页面请求,例如:
PageRequest pageRequest = PageRequest.of(pageNo, pageSize, Sort.by(Sort.Direction.valueOf(orderDir), orderFieldUid));
我也试过了
+ "order by ?4 ?3 and offset ?1 and limit ?2")
有没有办法将动态参数添加为order by 和offset?
我想要类似于 JPQL 中的 this 之类的东西。
【问题讨论】:
-
最后,我使用
Page<UserDetailsDTO> getAllUsers(Pageable pageable)修复了它,不需要在查询中传递参数。 Hibernate 将在内部从pageable获取参数
标签: postgresql jpql