Запрос хранилища данных Spring для получения значений, содержащих ноль - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующая таблица пользователей и хранилище.

Пользователь:

id;name;job;age
1;steve;nurse;33
2;steve;programmer;null
3;steve;programmer;null

Метод хранилища:

@Query("SELECT u FROM User u WHERE ("
        + "LOWER(u.name) = LOWER(:name) AND "
        + "LOWER(u.beruf) = LOWER(:job) AND "
        + "LOWER(u.alter) = LOWER(:age))")
public List<User> findUsers(@Param("name") String name,
        @Param("job") String job,
        @Param("age") String age);

Если я вызываю метод хранилища со следующими параметрами

String name = "steve";
String job = "programmer";
List<User> result = repository.findUsers(name, job, null); // empy list ..why ?

В результате я получаю пустой список, хотя ожидаю получить объекты с id = 2 и id = 3 в качестве результата.

Что я делаю не так?Как мне изменить запрос, чтобы получить две сущности в результате.

Спасибо

1 Ответ

0 голосов
/ 25 июня 2018

Согласно документации, это нормальное поведение, поэтому нельзя игнорировать пустые поля.используя метод @Query.вместо этого вы можете использовать спецификации метода запроса.больше информации [здесь] [jpa documentmentaiton]

, если вы хотите сохранить существующий метод, вы также можете пойти так:

@Query("SELECT u FROM User u WHERE ("
            + "LOWER(u.name) = LOWER(:name) AND "
            + "LOWER(u.beruf) = LOWER(:job) AND "
            + "( " +
            "   :age is null or LOWER(u.alter) = LOWER(:age) " +
                ")" 
    )
    public List<User> findUsers(@Param("name") String name,
                                @Param("job") String job,
                                @Param("age") String age);
...