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

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

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

到目前为止我有什么

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

问题:此查询获取所有元素(这不是真正有效)。 如果我直接使用EntityManager,我可以使用设置结果的数量

 entityManager.setMaxResults(1) 

只获得第一个元素。

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

想法:使用大小为0的PageRequest还是要走的路?

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

只需将nativeQuery添加到@Query注释即可使用sql的limit属性。 但是,还有另一种更好的方法。 存储库方法中的可分页类将在不触及@Query注释的情况下解决您的问题:

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

要设置限制和偏移量,请使用以下方法调用此存储库方法:

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

这里1对应于您想要的限制。

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

尝试这样做:

 @Query(value = "SELECT xelement FROM x xelement ORDER BY xelement.z LIMIT 1", nativeQuery = true)