在Spring数据休息中自定义查询和排序查询

时间:2016-03-23 14:48:48

标签: java spring spring-data spring-data-rest

我正在使用Spring数据休息,并尝试使用findAll自定义两个重载@Query方法的查询。但是,当我尝试这个时,我收到了这个错误:

  

java.lang.IllegalStateException:检测到不明确的搜索映射。公共抽象org.springframework.data.domain.Page courses.CourseRepository.findAll(org.springframework.data.domain.Pageable)和公共抽象java.lang.Iterable courses.CourseRepository.findAll(org.springframework.data.domain。排序)映射到/ findAll!调整配置以获得明确的路径!

调用这些方法时,URL按惯例不包含/findAll。用于检索未排序课程(但使用分页)的URL是

  

http://localhost:8080/v1/courses

和排序是

  

http://localhost:8080/v1/courses?sort=title

这是相关的代码,非常简单:

public interface CourseRepository extends PagingAndSortingRepository<Course, Long> {

  @Override
  @Query("SELECT c FROM Course c WHERE c.visible = 'Yes'")
  Page<Course> findAll(Pageable pageable);

  @Override
  @Query("SELECT c FROM Course c WHERE c.visible = 'Yes'")
  Iterable<Course> findAll(Sort sort);
}

我还尝试在课程实体上使用@NamedQuery并使用相同的错误消息。

编辑:

我发现findAll(Pageable pageable)方法有“内置”排序,但它没有对结果进行排序。当我点击以下URL并尝试按标题排序时,结果显然不按标题排序。但是,如果没有自定义@Query,则会对结果进行排序。

  

http://localhost:8080/v1/courses?sort=title

2 个答案:

答案 0 :(得分:4)

尝试

http://localhost:8080/v1/courses?sort=title,asc

http://localhost:8080/v1/courses?sort=title,desc

或者如果您使用较旧的Spring版本,请查看此文档:

http://docs.spring.io/spring-data/rest/docs/1.1.x/reference/html/paging-chapter.html

答案 1 :(得分:2)

我猜你正在尝试重载Spring-Data的findAll方法。这只能通过CustomRepository来实现。

以下是有用的link,可供您指导创建CustomRepository

您可以使用自定义方法定义一个类,以根据需要调整Spring-Data的方法。

Spring文档link用于相同的