Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring数据JPA和@Query注释仅获取第一个/最后一个元素_Java_Spring_Spring Data Jpa_Jpql - Fatal编程技术网

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

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

编辑:关于此问题的第二个和第四个答案中提供了此问题的解决方案

目标:使用Spring数据JPA存储库和Spring查询注释按属性z获取最大/最小的元素

到目前为止我所拥有的

@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));