使用 Spring Data JPA 和@Query注释仅获取第一个/最后一个元素

2022-09-01 19:19:59

编辑:这个问题的解决方案在第二个和第四个答案中提供了关于这个问题 setMaxResults for Spring-Data-JPA 注释?

目标:使用Spring Data JPA存储库和Spring Query注释按属性z获取最大/最小元素。

到目前为止,我拥有什么

@Query("SELECT xelement FROM x xelement ORDER BY xelement.z")
public List<X> findFirstElement();

问题:此查询提取所有元素(这实际上并不有效)。如果我直接使用EntityManager,我可以使用以下方式设置结果数量

entityManager.setMaxResults(1)

以仅获取第一个元素。

问题:如何使用@Query注释指定最大结果数?

想法:使用大小为 0 的 PageRequest 是可行的方法吗?

约束:我知道“FindFirstBy....”查询功能,但我想/必须使用注释。@Query


答案 1

您可以通过将 nativeQuery 添加到@Query注释来使用 sql 的 limit 属性。但是,还有另一种更好的方法来做到这一点。存储库方法中的可分页类将解决您的问题,而无需触及@Query注释:

@Query(value = "SELECT xelement FROM x xelement ORDER BY xelement.z")
List<X> findFirstElement(Pageable limit);

要设置限制和偏移量,use 应按如下方式调用此存储库方法:

List<X> xValues = xRepository.findFirstElement(new PageRequest(0, 1));

此处 1 对应于所需的限制。

更新(春季数据 2.0)

使用 PageRequest.of(0, 1) 而不是新的 PageRequest(0, 1)


答案 2

对于您的用例,我能想到的最接近的JPA查询语法是。这应该消除了编写自定义本机查询的需要。findFirstByZIsNotNullOrderByZAsc


推荐