微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JPQL使用动态顺序为and的查询创建新对象

如何解决JPQL使用动态顺序为and的查询创建新对象

我可以使用以下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,vu.id,ru.email")
List<UserDetailsDTO> getAllUsers();

现在,我想将order byASC/DESClimitoffset添加到上述查询中,以基于如下所示的动态参数获取结果:

@Query("SELECT new com.mycompany.dto.UserDetailsDTO(vu.id,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.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 byoffset? 我想要类似于JPQL中的this之类的东西。

解决方法

最后,我使用Page<UserDetailsDTO> getAllUsers(Pageable pageable)修复了该问题,无需在查询中传递参数。 Hibernate将从pageable

内部获取参数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。