首页 > 解决方案 > Spring Boot PagingAndSortingRepository 搜索:组合多个参数进行复杂搜索

问题描述

您好我正在尝试在我的 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,所以看起来我已经习惯了小参数。那么有没有一个简单的解决方法,或者一般来说我是如何习惯于实现如此复杂的搜索查询的?

标签: javarestspring-boot

解决方案


您可以将@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

);

这是一个很好的教程


推荐阅读