可以在另一个查询的结果集上选择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();
希望这可以帮到你。
- 如何在hibernate中使用一对一映射执行插入
- hibernate中的本机生成器类
- 如何在Oracle下处理大型事务?
- org.hibernate.internal.util.config.ConfigurationException:找不到cfg.xml资源
- Maven + SLF4J:使用需要两个不同SLF4J版本的两个不同依赖项时版本冲突
- PostgreSQL + Hibernate + Spring自动创建数据库
- 使用java和hibernate进行数据“安全性”
- JPA:如何表达包含@ElementCollection列的唯一约束?
- Hibernate自定义类型以避免’引起:java.sql.SQLException:Stream已经关闭’