Я пытаюсь динамически запрашивать базу данных в зависимости от того, какие параметры поиска отправляет пользователь. Чтобы реализовать этот динамизм, я отказываюсь от использования стандартного репозитория JPA / Crud. Однако базовый запрос довольно сложный. Предположим, что HOUSE и WINDOW оба являются классами сущностей и,
select h.*
from HOUSE h join WINDOW w on h.id = w.house_id
where ((w.status in ('OPEN', 'HALF OPEN')) or
(w.status = 'CLOSED' and w.condition = 'GOOD') or
(w.status = 'CLOSED' and w.condition is null and w.refurbished_date between NOW() - INTERVAL 365 DAY AND NOW()) or
(w.status = 'CLOSED' and w.manufacture_date <> '1960-01-01 00:00:00' and w.refurbished_date between NOW() - INTERVAL 365 DAY AND NOW()))
(не реальный запрос, но он достаточно хорошо иллюстрирует реальный)
Этот запрос не изменяется. Мне нужно только добавить к нему «И» в зависимости от того, что предоставлено пользователем.
Мне трудно решить, как к этому подойти. В Интернете я не нашел ничего, что позволяло бы перевести вышеуказанный SQL-код в логику API Criteria.
РЕДАКТИРОВАТЬ: до сих пор я пытался динамически создать запрос с использованием простого Java и выполнить его через сеанс,Однако возвращаемые результаты не отображаются автоматически в мой класс сущности (они имеют тип Object), и мне пришлось переопределить ResultSetTransformer - беспорядок!