Как обработать все значения перечисления в методе запроса JPA для пустого параметра - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть метод JPA, который находит список студентов по статусу их окончания.

List<Student> findAllByStatus(Status status);

Но если запрос сделан с нулевым статусом, я хочу получить объекты с нулевым статусом.

Как я могу справиться с этим с помощью JPARepository, используя только один метод запроса, чтобы не было фильтрации по статусу, если статус нулевой?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 19 февраля 2019

Вы должны использовать что-то вроде:

@Query("SELECT s from Student s WHERE (?1 is null or s.status = ?1)")
List<Student> findAllByStatus(Status status);

Просто небольшое исправление к ответу Анкит Канани.

0 голосов
/ 19 февраля 2019

Этот метод включает в себя немного больше кода, но я думаю, что это ваша лучшая ставка:

@Override
public List<Interface> findAllWithFilters(String name, InterfaceType type, String ip) 
{
    Interface intfc = new Interface();
    intfc.setName(name);
    intfc.setType(type);
    intfc.setIp(ip);

    ExampleMatcher matcher = ExampleMatcher.matching()
        .withMatcher("name", match -> match.contains())
        .withMatcher("type", match -> match.exact())
        .withMatcher("ip", match -> match.contains())
        .withIgnorePaths("id", "uuid")
        .withIgnoreNullValues();
    Example<Interface> example = Example.of(intfc, matcher);

    return ((InterfaceRepository) baseRepository).findAll(example);
}

.withIgnoreNullValues ​​() является ключом.Он просто вернет все, если вы отправите нулевое значение вместо константы перечисления.

0 голосов
/ 19 февраля 2019

JPA генерирует оператор SQL со знаком равенства.Сравнение нуля со знаком равенства не работает в большинстве СУБД.Вместо is необходимо ключевое слово:

WHERE (s.status =?1 and ?1 is not null) or (s.status is null and ?1 is null)
0 голосов
/ 19 февраля 2019

Попробуйте

@Query("SELECT s from Student s WHERE (s.status is null or s.status =?1)")
List<Student> findAllByStatus(Status status);
...