gpt4 book ai didi

java - JPA获取select中的上一条和下一条记录

转载 作者:搜寻专家 更新时间:2023-10-31 20:33:27 27 4
gpt4 key购买 nike

我有一个 JPQL 查询,它从数据库中检索实体的排序列表。我有这些实体之一的 ID。如何在我的选择中获取具有已知 id 的记录的上一条和下一条记录?

select distinct n from News n 
inner join n.author a
inner join n.tags t
where a.id = :authorId and t.id in :tagsId
order by size(n.comments) desc

新闻有一个作者,许多标签和评论。我选择具有给定作者和标签的新闻,并根据对它们的评论数对它们进行排序。

在使用 JDBC 时,我已经使用 rownum 解决了此类问题。

我可以使用 JPA 获取结果中记录的位置(rownum)吗?如果我知道记录的位置,我可以将第一个结果定义为该位置 - 1,并将给定查询的最大结果定义为 3。这就是我获取上一个、当前和下一个新闻的方式。

除了遍历新闻列表之外,还有其他解决方案吗?

最佳答案

我很确定可以做一些更好的事情,但这是我遇到类似问题时的解决方法:

SELECT l.id FROM Lines l WHERE l.date < :date ORDER BY l.date DESC

我想要的是检索上一个日期的 ID(“上一个”的意思是要适应您的情况)。详细步骤如下:

  • WHERE l.date < :date - 您选择所有被认为“低于”的记录(在我的例子中,时间较早)
  • ORDER BY l.date DESC - 您按日期降序排列该列表
  • SELECT l.id FROM Lines l - 您返回那个“半有序列表”的 ID
  • 我正在寻找的显然是该列表中的第一个(如果列表不为空)

我们的想法是将结果分成两个主要列表,一个包含“高于”您想要的所有结果,另一个包含“低于”您想要的结果。然后您订购它们并获得第一个结果。

我认为它可以改进为单个查询而不是两个,但我不确定如何。

希望对您或其他有类似问题的人有所帮助。

关于java - JPA获取select中的上一条和下一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31588957/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com