HQL可以选择在结果集的其它查询?
例如:
SELECT COUNT(*) FROM (SELECT * FROM Table)
我能做到这一点的SQL,但是当我试图像上面的HQL,但它只是告诉我语法错误“意外的标记:(靠近1号线,列22 ......”
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子句中,即使数据库支持的话,我通过将查询到SQL为解决这一问题store procedure
,然后调用HQL的过程。 例如:
插入程序到SQL:
DELIMITER $$
CREATE PROCEDURE `procedure_name`(
`arg_name` INT,
) BEGIN
your query here
END;
$$
DELIMITER ;
然后,如果使用休眠,请从下面的Java代码此步骤:
Query query = session.createSQLQuery("CALL procedure_name(:arg_name)");
query.setParameter("arg_name", args);
List list = query.list();
希望这可以帮到你。