Spring Boot PagingAndSortingRepository search: объединение нескольких параметров для сложного поиска - PullRequest
0 голосов
/ 17 января 2019

Привет! Я пытаюсь создать сложную конечную точку поиска в моем REST-API. У меня есть параметры multibele, и я люблю их составлять сложным образом. Это мои параметры:

@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 голосов
/ 17 января 2019

Вы можете использовать @ 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

);

Вот хороший учебник для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...