我有一个存储库接口,其中包含一些使用@Query注释的抽象方法。 现在我想为这些查询添加限制和偏移支持。
示例:
public interface ProductRepository
extends CrudRepository<Product, Long> {
@Query("from Product")
List<Product> findAllProducts();
}
这样的事情会很好
public interface ProductRepository
extends CrudRepository<Product, Long> {
@Query("from Product limit :limit ")
List<Product> findAllProducts(@Param("limit") Integer limit);
}
但这不起作用。有一个解决方案,我创建了一个接口的实现(http://stackoverflow.com/questions/3479128/jpql-limit-number-of-results) 但我想知道是否有可能在查询中添加偏移和限制,或者是否有注释。
答案 0 :(得分:11)
+1用户“他的”在评论中说:
“解决根本问题的标准方法是使用PagingAndSortingRepository”
这是一个例子。我正在把排序作为一个额外的奖励:
public interface ArtifactRepo extends JpaRepository<Artifact, Long> {
Page<Artifact> findByComponentKey(String componentKey, Pageable pageable);
}
(如果你愿意,你可以在上面使用@Query,但是JPQL本身不支持限制,正如“他的”所指出的那样。)
然后在调用时,使用
PageRequest pageRequest =
new PageRequest(0, 1, Sort.Direction.DESC, "buildNumber");
Page<Artifact> artifactsPage =
artifactRepo.findByComponentKey(componentKey, pageRequest);
我在这个主题上撰写了各种博客文章,这可能会有所帮助:
http://springinpractice.com/blog/categories/chapter-02-data/
答案 1 :(得分:6)
limit
。即使没有它,您的查询也无效JPQL queries(但可能是有效的HQL - 如果您的JPA提供商能够容忍,则可能有效)。
需要(部分)实现,因此您可以使用Query
接口或条件api。