有没有办法在输出中获得可重复的主键并在 spring data jpa 中保持分页?

Posted

技术标签:

【中文标题】有没有办法在输出中获得可重复的主键并在 spring data jpa 中保持分页?【英文标题】:is there a way to get repeatable primary keys in output and maintain pagination in spring data jpa? 【发布时间】:2022-01-02 10:46:59 【问题描述】:

我有个人实体的架构

person_id(PK) last_name first_name status

Spring 数据 jpa 查询(当前查询 iam 使用):

Page<PersonEntity> personEntitiesPage = personRepo.findByLastNameStartsWithIgnoreCase(
                            searchStringForLastName,
                            PageRequest.of(myPagingRequest.getPageNo(),
                                    myPagingRequest.getPageSize(),
                                    Sort.by(ASC, lastName)));

新要求: 我会得到一个 personIds 列表 列表 personList =new ArrayList(); //重复其他方法的personIds

我需要对姓氏和分页进行排序,但 personIds 应该是可重复的

我需要为此编写一个查询吗?

有什么方法可以直接在 spring data jpa 或普通 sql 中编写查询?

示例: personList with 23,90,90,102,102,102 //此处可重复列表

我需要结果为:

person_id(PK) last_name first_name status
90 carlson kevin active
90 carlson kevin active
23 madisson harley inactive
102 rossetta karla active
102 rossetta karla active
102 rossetta karla active

我需要可重复的列表以及我需要为该查询维护分页和排序 请尝试帮助我。谢谢

TechStack 我正在使用:java、spring boot 、hibernate 、spring data jpa、postgres db

【问题讨论】:

如果您在进行后端分页,则需要添加一些其他列来区分看似相同的行(如前两行)。即使没有显示这个额外的列,它也应该包含在结果集中,以便后端知道如何继续分页。 我认为您正在寻找 @query 注释并在 jpql 或本机 SQL 中编写您的选择。试试看这个baeldung.com/spring-data-jpa-query。我建议你使用 jpql。 @TheImpaler 谢谢你的评论。这就是我面临的问题,我无法更改生产数据库。这种情况的出现是因为 personList 来自另一个模式,我需要检索可重复列表并且还需要维护分页。搜索互联网并找到派生表(不知道它是否有效?)和其他随机的东西 @tomsheldon 要获得正确的后端分页,您需要在行中使用“唯一键”。它可以是单个列,也可以是列的组合。您可能不需要更改数据库,但您需要确保查询生成此键。 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

您可以使用 postgreSQLjpql 查询对其进行排序。

往下看:

存储库

@Query(nativeQuery=true, value="SELECT * FROM person WHERE last_name = ?1 ORDER BY person_id ASC;")
public Page<PersonEntity> findByLastNameStartsWithIgnoreCase(String last_name);

ServiceImpl

Page<PersonEntity> personEntitiesPage = personRepo.findByLastNameStartsWithIgnoreCase(String last_name);

【讨论】:

感谢您的回答。但我需要可重复的列表作为响应,上述查询将给出不可重复的列表。因为 personId 是唯一的主键 在 SQL Server 中无法插入主键中有重复值的记录。 是的,我需要查询响应而不是 db.anyways 谢谢你的回答

以上是关于有没有办法在输出中获得可重复的主键并在 spring data jpa 中保持分页?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在两个表中映射不同的键并在列值上隐含一些逻辑来创建关联

将自动递增的主键插入 Access 表

遍历多个hashmap键并在jsp上显示[重复]

mybatis插入数据并返回主键(oracle)

如何在 GridView 中使 Access 主键可编辑

mysql过滤重复数据的问题