可以在另一个查询的结果集上选择HQL吗?

可以在另一个查询的结果集上选择HQL吗?
例如:

SELECT COUNT(*) FROM (SELECT * FROM Table) 

我可以在SQL中做到这一点,但是当我在HQL中尝试上面但它只是向我显示语法错误“意外令牌:(靠近第1行,第22列……”

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

 select count(*) from table t (where table is the entity name) 

如果查询涉及比(select * from Table)更复杂的语句,我建议将此逻辑放入视图中,然后根据此视图创建实体。

对于支持子选择的数据库,Hibernate支持查询中的子查询。 子查询必须用括号括起来(通常通过SQL聚合函数调用)。 甚至允许相关子查询(引用外部查询中的别名的子查询)。

 from DomesticCat as cat where cat.name not in ( select name.nickName from Name as name ) 

根据需要使用子查询是不可能的。 一种方法是使用不同的方式:

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

我使用内连接来表达选择重复

即使数据库支持它,也from在HQL的from子句中执行子查询,我通过将查询作为store procedure放入sql来解决此问题,然后在HQL中调用该过程。 例如:

将过程插入到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(); 

希望这可以帮到你。