我有扩展CrudRepository
:
public interface ExampleRepository extends CrudRepository<Example, Long>{
List<Example> findByValidIsTrueLimit(Integer limit);
}
我希望将结果列表限制为指定限制,例如在SQL查询中使用limit
。
但是我得到了:
引起:org.springframework.beans.factory.BeanCreationException: 创建名称为&#39; exampleRepository&#39;:init的调用时出错 方法失败;嵌套异常是java.lang.IllegalArgumentException: 无法创建查询方法public abstract未找到属性限制 对于类型
如何将作为参数传递的限制添加到CrudRepository
方法?
答案 0 :(得分:1)
您可以在方法签名中添加Pageable
。 E.g。
List<Example> findByValidIsTrue(Pageable p);
用法:
List<Example> ex = repo.findByValidIsTrue(new PageRequest(0, 10));
答案 1 :(得分:1)
从春季文档(Limiting query results):
查询方法的结果可以通过关键字first或top来限制,可以互换使用。可选的数值可以附加到top / first以指定要返回的最大结果大小。如果省略该数字,则假定结果大小为1。
因此,对于固定限额N
,您可以使用List<Example> findTopNByValidIsTrue()
对于变量的限制值,您应该使用Pageable:
Page<Example> findByValidIsTrue(Pageable pageable);
List<Example> result = repository.findByValidIsTrue(new PageRequest(0, N)).getContent();
答案 2 :(得分:1)
您可以使用Pageable,它会为您提供Page<T>
,然后您就可以从中获取所请求的数据。
Page<Example> findByValidIsTrue(Pageable pageable);
然后使用PageRequest调用它: -
PageRequest req = new PageRequest(0,10); // I just want 10 record
Page<Example> page = findByValidIsTrue(req )
List<Example> nRecords = page.getContent();
注意:如果您在调用PageRequest
时未通过findByValidIsTrueLimit
对象,则默认情况下,它会为您提供前20条记录。