Подтвердить что ты не робот

Spring Необязательный параметр данных в методе запроса

Я хочу написать некоторые методы запросов в слое репозитория. Этот метод должен игнорировать нулевые параметры. Например:

List<Foo> findByBarAndGoo(Bar barParam, @optional Goo gooParam);

Этот метод должен быть возвращен Foo этим условием:

bar == barParam && goo == gooParam;

если gooParam не равен нулю. если gooParam имеет значение null, тогда условие изменится на:

bar == barParam;

Есть ли какое-нибудь решение? Кто-нибудь может мне помочь?

4b9b3361

Ответ 1

Я не верю, что вы сможете сделать это с помощью подхода имени метода к определению запроса. Из документации (reference):

Хотя получение запроса, полученного из имени метода, довольно удобно, можно столкнуться с ситуацией, в которой либо метод парсер имен не поддерживает ключевое слово, которое хочет использовать, или метод имя будет излишне уродливым. Таким образом, вы можете использовать JPA с именем запросов через соглашение об именах (см. Использование JPA NamedQueries для больше информации) или, скорее, аннотировать ваш метод запроса с помощью @Query

Я думаю, что у вас есть эта ситуация здесь, поэтому в нижеприведенном ответе используется подход аннотации @Query, который почти так же удобен, как подход к имени метода (reference).

    @Query("select foo from Foo foo where foo.bar = :bar and "
        + "(:goo is null or foo.goo = :goo)")
    public List<Foo> findByBarAndOptionalGoo(
        @Param("bar") Bar bar, 
        @Param("goo") Goo goo);

Ответ 2

Вы можете закодировать это сами в нескольких строках:

List<Foo> findByBarAndOptionalGoo(Bar bar, Goo goo) {
   return (goo == null) ? this.findByBar(bar) : this.findByBarAndGoo(bar, goo);
}

В противном случае я не знаю, поддерживает ли Spring -Data это из коробки.