使用@Query注释限制结果集

时间:2014-02-21 02:12:40

标签: jpa spring-data

我有一个查询,我想限制结果集的大小。由于JPA不支持'LIMIT',我一直试图找出正确的方法。我试过了:

@Query("SELECT w FROM WardTransaction w WHERE w.visit = :visit ORDER BY w.admissionDateTime DESC").setMaxResults(1)
public WardTransaction findCurrent(@Param("visit") Visit visit);

哪个不对。我正在寻找关于正确语法的一些指导。

我的存储库代码是:

1 个答案:

答案 0 :(得分:3)

@Query("SELECT w FROM WardTransaction w WHERE w.visit = :visit ORDER BY w.admissionDateTime DESC")

以上是查询方法定义,对于查询中的setMaxResult,您需要使用Pageable对象,如下所示。

    @Query("SELECT w FROM WardTransaction w WHERE w.visit = :visit ORDER BY w.admissionDateTime DESC")
public void List<Entities> findAll(Pageable pageable) 

JPA存储库必须实现SimpleJpaRepository

按照以下方式设置Pageable对象&gt;

    Pageable pageSpecification = PageRequest(int page, int size)

Pageable和SimpleJpaRepository的组合是解决方案。

看看here

如果您使用的是EntityManager和NamedQueries,则有一个方法setMaxResult适用于Query对象,但它是一个不同的故事。