postgresql - JPQL 使用具有动态排序依据和限制的查询创建新对象
问题描述
我可以使用这个 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 中类似这样的东西。
解决方案
Page<UserDetailsDTO> getAllUsers(Pageable pageable)
最后,我通过在查询中使用不需要传递参数来修复它。Hibernate 将在内部从pageable
推荐阅读
- vba - 比较两行并更新开始和结束日期
- graphql - GraphQL 端点在 Nest.js 中返回空对象
- php - PHP Soap 客户端在 PHP 版本 7 中失败,但在 PHP 5.3 中有效
- javascript - three.js raycaster 正在选择我要选择的对象后面和前面的所有对象
- cmake - 等待 ctest_submit 时遇到问题
- asp.net - 应用程序在 VS iis express 但不在 IIS 8 (v2) 中运行
- javascript - Knex.js INNER JOIN 结果的 DISTINCT
- css - 使用百分比 '%' 作为 SASS 函数的参数
- windows - 用 & 字符分割时,批处理命令不再起作用
- html - 删除菜单链接之间的空格