【发布时间】:2019-05-06 07:13:20
【问题描述】:
我想将此普通 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 查询不支持缓存。
【问题讨论】:
-
HQL 不支持联合。所以请说明你的要求。还提供您的实体类。
-
嗨@PoojaAggarwal 我在上面提到了我的要求。
-
您希望在这种查询中使用什么特定的缓存功能?
-
@LukasEder 现在我只想将其转换为 HQL,重新调整缓存我会这样做。你有什么想法吗?
-
我个人认为您不应该将此查询转换为 HQL。当然可能有一个解决方法(例如,只使用连接),但你可能最好使用原生 SQL。