Как обрабатывать нулевые значения в HQL-запросе при проверке списка на наличие целочисленного значения - PullRequest
0 голосов
/ 04 октября 2019

У меня есть репозиторий Spring Boot, в котором я пытаюсь создать функцию запроса с использованием HQL.

Функция принимает параметр Integer, который должен игнорироваться запросом, если он нулевой, иначе списокследует проверить, содержит ли оно значение.

У меня есть предложение where из двух частей: проверка на нулевое значение и проверка списка, выглядящие следующим образом:

@Query("SELECT u FROM MyEntity " +
" WHERE (:myParam is null or :myParam in (2, 3))"
)

Теперь проблема в том, чтодля части :myParam in (2, 3) он жалуется "Несогласованные типы данных: ожидаемый BINARY получил NUMBER

(когда: myParam имеет значение null, для: myParam! = null это работает)

Я пытался:

  • приведение либо параметра, либо нулевого значения в

  • с использованием coalesce (: myParam, CAST (NULL AS int)), который работал над аналогичнымпроблема с: myParam является целочисленным списком

  • с использованием оператора регистра переключателя

(case when :spracheKy is null then true when :spracheKy in (2, 3) then true else false end) = true

Заранее спасибо залюбая помощь

1 Ответ

0 голосов
/ 04 октября 2019

почему бы вам просто не использовать два разных метода репозитория, например, один, который не принимает параметров, и другой метод, который принимает параметры. а затем решить и инкапсулировать логику принятия решений в отдельном методе вашего сервисного уровня - я имею в виду логику, какой метод репозитория вызывать на основе параметра, являющегося нулевым или нет ... может выглядеть так:

@Service
@Transactional
public class YourService {

    // autowired by constructor injection
    private final YourEntityRepository repo;

    public List<YourEntity> getAllYourEntitiesByParam(Long param) {
        if (param == null) {
            return repo.findAll();
        }
        return repo.findAllByParam(param);
    }
}
...