который передается UUID.
UUID может не передаваться и тогда он будет null. Из-за этого происходит ошибка:
ERROR: operator does not exist: uuid = bytea
No operator matches the given name and argument types. You might need to add explicit type casts.
Проверки вроде NOTNULL не помогают
CAST(:id as uuid) тоже не помог
@Query(value = """
\\ different logic
WHERE
(:filter = false OR sta.agg_id in (:id))
\\ different logic
)""",
nativeQuery = true)
List<Student> findAllBy(Boolean filter, UUID id, Integer percent);
Кто-нибудь сталкивался с такой проблемой?
А в чем проблема? Не передавай туда null и всё. Возвращай пустой лист до вызова репозитория, даже базу напрягать не надо
проблема в том что это фильтр и если Id передается, то нужно вернуть определенные значения, а если Id не передается, то нужно вернуть все значения
:filter = false OR (:id) is null OR sta.agg_id in (:id) А так? Когда filter не false, id может быть null?
Не помогает. Там ошибка из-за сериализации. Ему не нравится, что id другого типа данных и из-за этого ошибка
Кстати да, лучше Стрингой его туда передавать. Просто избавишь себя от лишних проблем
Закостылить, чтобы если null передавать id вроде 00000000-0000-0000-0000-000000000000. И проверять, если 00000000-0000-0000-0000-000000000000, то ничего не делай? А будет ли это работать если мы проходим по столбцу с типом UUID и ищем этот Id с типом стринга?
1) у тебя в базе нет таких Id, а значит никаких значений не вернётся 2) стринге пофиг, что сравнивать, в базе твой uuid скорее всего тоже в виде текста просто лежит
Тебе надо наоборот сравнивать с существующим значением, чтобы этот нулл ни на что не влиял
Поэтому тебе надо будет вписать что-то вроде ... AND <поле ИД в базе> = CASE WHEN length(:Id) > 0 THEN :Id ELSE <поле ИД в базе> ... Я не смотрел в твой кусочек кода, я просто описываю концепцию
К сожалению не помогло. Там другие ошибки появились. В итоге выяснилось, что нужен лист ИДишников. Но я появилась другая проблема: Колонки id не найдено в этом ResultSet’’е. Хотя в базе данных запрос отрабатывает, кто-нибудь сталкивался?
Обсуждают сегодня