Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将SQL转换为具有联合和内部联接的HQL?_Java_Sql_Hql - Fatal编程技术网

Java 如何将SQL转换为具有联合和内部联接的HQL?

Java 如何将SQL转换为具有联合和内部联接的HQL?,java,sql,hql,Java,Sql,Hql,我想将这个普通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 <> 'tr

我想将这个普通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
问题点 如果此查询中只存在联合,那么我可以将此查询转换为2个子查询,但我的问题是,在联合之后,我们再次使用内部联合。这是我的主要问题

我的要求
我希望从HQL查询得到与从该SQL查询得到的结果相同的结果。我不想使用SQL查询,因为SQL查询不支持缓存。

如果您需要使用内部联接进行严格的联合,那么最好使用本机SQL。结果集可以转换为java类中的POJO对象。但是,您可以利用本机查询执行的速度,并且只需点击一次db。

HQL不支持联合。所以请解释一下你的要求。还提供您的实体类。您好@PoojaAggarwal我在上面提到了我的要求。您希望在这种查询中使用什么特定的缓存功能?@LukasEder现在我只想将其转换为HQL,重新获得缓存,我会这样做。你有什么想法吗?我个人认为你不应该把这个查询转换成HQL。当然,这可能有一个解决方法,例如只使用联接,但使用本机SQL可能更好。实际上,在我的查询中,我计算的是表的计数,而不是列数。因此,我认为POJO类不适合计算计数。