可分页 - 按多个表中的值排序

Posted

技术标签:

【中文标题】可分页 - 按多个表中的值排序【英文标题】:Pageable - sorting by values from several tables 【发布时间】:2020-03-04 11:54:52 【问题描述】:

我正在编写一个从多个表中收集数据的本机查询。我还需要可分页并按联盟排序。不幸的是,Sort 立即“粘住”了第一个没有给定联盟的表的地址。是否可以动态排序和分页?我试图传递一个名称后跟“order by”的字符串,但hibernate忽略了它。

@Query(value = "SELECT pt.id as id, pt.work as workplace ,bo.virtualName as title, bo.creationDate as date FROM t_projecttemplate pt JOIN t_objecttowork ot on pt.id=ot.id JOIN t_objectplus bo on ot.id=bo.id where bo.deleted=false and bo.parent_id=?1", nativeQuery = true)
List<Map<String,Object>> getObjects (Long parentId, Pageable pageable); //want to sort by title, hibernate sticks immediately "pt."

【问题讨论】:

【参考方案1】:

当您调用getObjects 并将Pageable 传递给它时(例如PageRequest),它有一个sort 参数。所以你可以创建类似的东西:

Pageable myPage = PageRequest.of(0, 10, Sort.Direction.ASC, "title");
getObjects(parentId, myPage);

【讨论】:

这是 Pageabel 的创建方式,并且随着标题的传递,在 SQL 中它被附加了“pt.title”(在 Pageable no 内)

以上是关于可分页 - 按多个表中的值排序的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA 按嵌套属性排序时结合 DISTINCT 和 ORDER BY

在 Symfony2 中按多个值对数据库中的记录进行排序

Spring boot - sortBy(可分页)内的减法

构造一个 dynamoDB 表以对表中的 * 项启用 ASC 或 DESC 有序分页

LeetCode83. 删除排序链表中的重复元素

Spring Boot中的可分页[重复]