我有一个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。这就是我可以获得之前,当前和下一个新闻的方式。
除了遍历新闻列表外,还有其他解决方案吗?
答案 0 :(得分:1)
我很确定可以做得更好,但这是我遇到类似问题时的解决方法:
SELECT l.id FROM Lines l WHERE l.date < :date ORDER BY l.date DESC
我想要的是检索上一个日期的ID(“ previous”的意思是要适应您的情况)。详细步骤如下:
这个想法是将结果分为两个主要列表,一个列表的所有结果都在所需的“上方”,而另一个列表的结果则在“下方”。然后您订购它们并获得第一个结果。
我认为可以将其改进为单个查询,而不是两个查询,但是我不确定如何。
希望它可以帮助您或其他有类似问题的人。