Java 使用Spring数据JPA和@Query注释仅获取第一个/最后一个元素
编辑:关于此问题的第二个和第四个答案中提供了此问题的解决方案 目标:使用Spring数据JPA存储库和Spring查询注释按属性z获取最大/最小的元素 到目前为止我所拥有的Java 使用Spring数据JPA和@Query注释仅获取第一个/最后一个元素,java,spring,spring-data-jpa,jpql,Java,Spring,Spring Data Jpa,Jpql,编辑:关于此问题的第二个和第四个答案中提供了此问题的解决方案 目标:使用Spring数据JPA存储库和Spring查询注释按属性z获取最大/最小的元素 到目前为止我所拥有的 @Query("SELECT xelement FROM x xelement ORDER BY xelement.z") public List<X> findFirstElement(); 只获取第一个元素 问题:如何使用@Query注释指定最大结果数 想法:使用大小为0的页面请求是否可行 约束:我知道“F
@Query("SELECT xelement FROM x xelement ORDER BY xelement.z")
public List<X> findFirstElement();
只获取第一个元素
问题:如何使用@Query注释指定最大结果数
想法:使用大小为0的页面请求是否可行
约束:我知道“FindFirstBy…”查询功能,但我想/必须使用@query
注释。尝试这样做:
@Query(value = "SELECT xelement FROM x xelement ORDER BY xelement.z LIMIT 1",
nativeQuery = true)
只需将nativeQuery添加到@Query注释中,就可以使用sql的limit属性。然而,还有另一种更好的方法。存储库方法中的Pageable类将解决您的问题,而无需触及@Query注释:
@Query(value = "SELECT xelement FROM x xelement ORDER BY xelement.z")
List<X> findFirstElement(Pageable limit);
@Query(value=“按xelement.z从x xelement订单中选择xelement”)
列表findFirstElement(可分页限制);
要设置限制和偏移量,请使用以下方法调用此存储库方法:
List<X> xValues = xRepository.findFirstElement(new PageRequest(0, 1));
List xValues=xRepository.findFirstElement(新页面请求(0,1));
这里1对应于您想要的限制
更新(SPRING数据2.0)
使用PageRequest.of(0,1)而不是new PageRequest(0,1)我能想到的最接近您用例的JPA查询语法是
findFirstByZIsNotNullOrderByZAsc
。这将消除编写自定义本机查询的需要。当您的方法只返回单个元素时,为什么要返回List
?如果查询真的那么简单,您可以避免使用@query
,只需使用findFirstOrderByZ()
。否则,您将不得不使用LIMIT
关键字限制返回的记录数通过x.z LIMIT 1从元素x顺序中选择x
@manish:1。关于列表,这只是为了足够灵活,以防我切换任意数量的项目,但是的,原则上你是正确的,在这种情况下返回列表是过分的。2.关于“findFirst..”->请参见约束。3.您确定limit关键字在JPQL中可用吗?我想我得检查一下。。。。我还发现,这基本上解决了问题。发现[[1]中的第二个和第四个答案涵盖了这一点:可能重复的请不要按答案在列表中的顺序引用答案。此顺序会发生变化。请直接链接到答案。从spring data 2.0开始,它是(0,1)的PagaRequest
而不是new PageRequest(0,1)
。函数中的参数应该是findFirstElement(PageRequest limit)
,而不是Pageable
,对吧?至少对我来说,它不适用于Pageable。它只是不起作用。你把本机查询和JPQL语法混为一谈。
List<X> xValues = xRepository.findFirstElement(new PageRequest(0, 1));