Spring Data:限制自定义查询的结果

时间:2017-05-16 14:35:59

标签: java spring spring-data spring-data-jpa

在我的Spring Data存储库中,我(必须)使用@Query注释使用自定义查询。我知道我可以限制命名查询中的结果数量

Iterable<Person> findFirst5OrderByLastName()

或者可以通过传递类似

的可分页来限制结果数量

Iterable<Person> findByLastName(String lastName, Pageable pageable)

但是在使用自定义@Query注释时是否可以实现相同的目标?

TIA

修改

因为我看到我的问题有点令人困惑,有些澄清: 我想要的是在使用自定义查询时限制我得到的结果数量,这样我就不会

1)需要通过可分页

指定结果大小

2)需要使用命名查询来指定结果大小

实际上我希望在调用方法时结果数量的限制完全透明(因此不传递Pageable)并且不依赖于Spring Data的命名方案(作为含义/函数)该方法最好通过自定义名称传达

5 个答案:

答案 0 :(得分:1)

你可以试试这个:

@Entity
@Table(name = "persons") 
public class Person {
    //...
}

@Query(value = "select * from persons limit 50", nativeQuery = true)
List<Person> getFirst50();

不要忘记检查您的SQL服务器是否支持limit关键字。

答案 1 :(得分:1)

当然你可以使用@Query来排序结果,它是一个JPQL查询,例如。

@Query("SELECT u FROM User u ORDER BY u.name ASC")

可以通过提供PageRequest或直接使用Sort来进行进一步排序。

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.sorting

答案 2 :(得分:1)

我建议添加“ ”,但不带参数,它将起作用:

List<Person> findTop100By();

答案 3 :(得分:0)

您需要扩展PagingAndSortingRepository

并添加方法

Page<Person> listAllByPage(Pageable pageable)

请参阅the example

答案 4 :(得分:0)

你好,你可以试试这个

@Query("...")
List<YourDTO>getData(Pageable pageable)

在您的服务中

    List<YourDTO> getData(){
    int limit=10;
    Pageable pageable = PageRequest.of(0, limit);
    return this.repo.getData(pageable);
}

你应该避免 nativeQuery