Spring Boot PagingAndSortingRepository搜索:组合多个参数进行复杂搜索

时间:2019-01-17 08:26:21

标签: java rest spring-boot

嗨,我正在尝试在我的REST-API中构建一个复杂的搜索端点。我有多重参数,并且喜欢以复杂的方式编写它们。这些是我的参数:

@Param(value = "applicationId") String applicationId,
@Param(value = "mdName01") String mdName01,
@Param(value = "mdName02") String mdName02,
@Param(value = "mdName03") String mdName03,
@Param(value = "mdName04") String mdName04,

我喜欢做的是这样的:

findAllBy: applicationID AND (mdName1 OR mdName2 OR MdName3 OR MdName4)

因为找不到()的内容,我将声明更改为:

findAllBy: applicaionID AND mdName1 OR applicaionID AND mdName2 OR applicaionID AND mdName3 [...]

这是我的方法现在的外观:

Page<vwFact> findAllByApplicationIdAndMdName01StartingWithOrApplicationIdAndMdName02StartingWithOrApplicationIdAndMdName03StartingWithOrApplicationIdAndMdName04StartingWith (
        @Param(value = "applicationId") String applicationId,
        @Param(value = "mdName01") String mdName01,
        @Param(value = "mdName02") String mdName02,
        @Param(value = "mdName03") String mdName03,
        @Param(value = "mdName04") String mdName04,
        Pageable pageable
);

现在,当我运行请求时,出现以下错误:java.util.NoSuchElementException,因此看起来我已经习惯了很少的参数。 那么,有没有一个简单的解决方案?或者说我通常是如何实现这种复杂的搜索查询的?

1 个答案:

答案 0 :(得分:1)

您可以使用@Query进行复杂的查询,这非常容易使用。

使用@Query,您的代码将看起来像下面的代码段。

@Query(SELECT v FROM vwFact v WHERE v.applicationId = :applicationId and v.mdName01 = :mdName01)
Page<vwFact> findAllByApplicationIdAndMdName01StartingWithOrApplicationIdAndMdName02StartingWithOrApplicationIdAndMdName03StartingWithOrApplicationIdAndMdName04StartingWith (
    @Param(value = "applicationId") String applicationId,
    @Param(value = "mdName01") String mdName01,
    @Param(value = "mdName02") String mdName02,
    @Param(value = "mdName03") String mdName03,
    @Param(value = "mdName04") String mdName04,
    Pageable pageable

);

这是一个不错的tutorial开头。