Java HQL是否可以选择另一个查询的结果集?

Java HQL是否可以选择另一个查询的结果集?,java,hibernate,subquery,hql,Java,Hibernate,Subquery,Hql,HQL是否可以选择另一个查询的结果集? 例如: SELECT COUNT(*) FROM (SELECT * FROM Table) select count(*) from table t (where table is the entity name) 我可以在SQL中执行此操作,但当我尝试在HQL中执行上述操作时,它只是向我显示了语法错误意外标记:在第1行第22列附近…HQL确实支持,但是它们只能出现在select或where子句中。您提供的示例最好在HQL中作为直接语句编写。例如:

HQL是否可以选择另一个查询的结果集? 例如:

SELECT COUNT(*) FROM (SELECT * FROM Table)
select count(*) from table t  (where table is the entity name)
我可以在SQL中执行此操作,但当我尝试在HQL中执行上述操作时,它只是向我显示了语法错误意外标记:在第1行第22列附近…

HQL确实支持,但是它们只能出现在select或where子句中。您提供的示例最好在HQL中作为直接语句编写。例如:

SELECT COUNT(*) FROM (SELECT * FROM Table)
select count(*) from table t  (where table is the entity name)
如果查询涉及比select*from表更复杂的语句,我建议将此逻辑放入视图中,然后基于此视图创建一个实体

对于支持子选择的数据库,Hibernate支持子查询 在查询中。子查询必须由括号包围,括号通常为 SQL聚合函数调用。偶相关子查询 允许在外部查询中引用别名的子查询

范例


按照您的意愿使用子查询是不可能的。一种方法是使用一种独特的方法:

SELECT COUNT(DISTINCT t.id) FROM table t INNER JOIN t.list l
     WHERE t.status = 'ST1' AND l.status = 'ST2'"

我使用内部连接来表示select REPLICATION(选择重复)

在HQL中,即使数据库支持它,也无法在from子句中执行子查询,我将查询作为存储过程放入sql中,然后在HQL中调用该过程,从而解决了这个问题。例如:

SELECT COUNT(*) FROM (SELECT * FROM Table)
select count(*) from table t  (where table is the entity name)
将过程插入到sql中:

DELIMITER $$
CREATE PROCEDURE `procedure_name`(
  `arg_name` INT,
) BEGIN
     your query here
END;
$$
DELIMITER ;
然后,如果您使用hibernate,请从java代码调用此过程,如下所示:

Query query = session.createSQLQuery("CALL procedure_name(:arg_name)");
query.setParameter("arg_name", args);
List list = query.list();

希望这能对您有所帮助。

我为我的查询创建了一个视图,然后为此创建了一个模型对象。然后,为它创建HQL查询就很简单了


我的应用程序没有其他应用程序可能具有的某些性能要求,因此我可以不受影响。

是否有等效的标准?@C_B,检查此stackoverflow我有相同的问题,请建议您使用的确切解决方案。最好对同一个表使用内部联接。在这种情况下,HQL无法在from子句中添加子查询