Как конвертировать SQL в HQL с объединениями и внутренними объединениями? - PullRequest
2 голосов
/ 06 мая 2019

Я хочу преобразовать этот простой SQL-запрос в HQL . У меня есть идея, как преобразовать запросы SQL в запросы HQL, но мой запрос содержит UNION и затем внутреннее соединение. Поэтому мне стало сложно его преобразовать.

select count(distinct T.id_veicolo) from 
((select distinct C.id_veicolo from (
(select distinct id_veicolo from movement
where id_sede_uscita = 23
and annullato <> 'true' 
and (((inizio >= '2019-01-05' and inizio <= '2019-01-06') and fine >= '2019-01-06') 
or (inizio <= '2019-01-05' and (fine <= '2019-01-06' and fine >= '2019-01-05')) 
or (inizio <= '2019-01-05' and fine >= '2019-01-06') or (inizio >= '2019-01-05' and fine <= '2019-01-06'))) 
UNION 
(select id_veicolo from freeVehicle where id_sede = 23 and inizio <= '2019-01-05' and fine >= '2019-01-06') ) as C) as D 
inner join (select id from parco_veicoli where targa = 'XXX') as R on D.id_veicolo = R.id) as T

Проблемная точка

Если в этом запросе присутствует только UNION , я могу преобразовать этот запрос в 2 подзапроса, но моя проблема в том, что после UNION мы снова используем внутреннее соединение. Что является для меня главной проблемой.

Мои требования

Я хочу получить тот же результат запроса HQL, что и этот запрос SQL. Я не хочу использовать SQL-запрос, потому что SQL-запросы не поддерживают кэширование .

1 Ответ

1 голос
/ 06 мая 2019

В случае, если вам необходимо строго объединить с внутренним объединением, лучше перейти на собственный sql. Набор результатов может быть преобразован в объекты POJO в классе java. Но вы будете использовать скорость выполнения собственного запроса, а также всего лишь одно попадание в дб. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...