Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Hibernate 由于HQL,是否可以在“FROM”子句中使用子查询转换SQL查询_Hibernate_Subquery_Hql - Fatal编程技术网

Hibernate 由于HQL,是否可以在“FROM”子句中使用子查询转换SQL查询

Hibernate 由于HQL,是否可以在“FROM”子句中使用子查询转换SQL查询,hibernate,subquery,hql,Hibernate,Subquery,Hql,我有两张桌子:机器和机器可用性。我想从给定的机器检索可用性。即使没有与我的标准匹配的可用性,我仍然希望检索我的机器。因此,我编写了本机SQL查询: select * from ( select ma.* from machine m1 join machine_availability ma on m1.id = ma.id_machine where m1.id = 43 and ma.available is true

我有两张桌子:机器和机器可用性。我想从给定的机器检索可用性。即使没有与我的标准匹配的可用性,我仍然希望检索我的机器。因此,我编写了本机SQL查询:

select *
from (
       select ma.*
       from machine m1
       join machine_availability ma on m1.id = ma.id_machine
       where m1.id = 43
         and ma.available is true
         and ma.id_day > '20190228'
     ) as m
       right join machine m2 on m2.id = m.id_machine
where m2.id = 43;
问题是,我有义务将其作为HQL查询,因为我的@OneToMany机器和机器可用性之间的关联是懒惰的。但我在文档中读到HQL不支持“FROM”子句中的子查询

有人知道我如何将其转换为HQL吗

或者,如果我更改java代码中的某些内容,也许可以使用本机查询?

首先简化SQL 首先,将SQL简化为两次访问计算机没有意义:

挑选* 来自机器m 左连接机器\u可用性ma 在m.id=ma.id\u机器上 这是真的 和ma.id_day>“20190228” 其中m.id=43; 现在,转换为HQL或者只执行一个本机查询应该很简单

关于使用字符串作为日期的旁注
如果可以,我强烈建议不要在日期中使用人类可读的字符串。这只会导致优化器对谓词的基数估计出现重大混乱,导致索引合适时进行全表扫描,反之亦然

首先,感谢您的旁注,但正如我所说的,我想检索一台机器,即使没有与我的标准匹配的可用性,这就是我访问机器的原因twice@sweetacaro:这正是我的查询所做的。观察左连接,条件在连接谓词中,而不是where谓词w,我才意识到其中的微妙之处!太多了!