编辑:具体谈论查询没有表.是的我可以使用存在,但我必须这样做
select case when exists (blah) then 1 else 0 end as conditionTrue
from ARealTableReturningMultipleRows
Run Code Online (Sandbox Code Playgroud)
在T-SQL中我可以这样做:
select case when exists(blah) then 1 else 0 end as conditionTrue
Run Code Online (Sandbox Code Playgroud)
在Oracle中我可以做到:
select case when exists(blah) then 1 else 0 end as conditionTrue from DUAL
Run Code Online (Sandbox Code Playgroud)
如何在HQL中实现相同的功能?
select count()似乎是第二好的替代方案,但如果我不需要,我不想处理表中的每一行.
简短的回答:我相信这是不可能的。
我的推理:
根据在哪里可以找到所有 HQL 关键字的列表?Hibernate 项目并未在其网站上发布 HQL 语法,但它在 Hibernate 完整发行版中以.g
ANTLR 文件形式提供。
我对 ANTLR 中的文件没有太多经验.g
,但您可以在文件 ( hibernate-distribution-3.6.1.Final/project/core/src/main/antlr/hql.g
) 中找到它:
selectFrom!
: (s:selectClause)? (f:fromClause)? {
// If there was no FROM clause and this is a filter query, create a from clause. Otherwise, throw
// an exception because non-filter queries must have a FROM clause.
if (#f == null) {
if (filter) {
#f = #([FROM,"{filter-implied FROM}"]);
}
else
throw new SemanticException("FROM expected (non-filter queries must contain a FROM clause)");
}
Run Code Online (Sandbox Code Playgroud)
其中明确指出有些 HQL 查询没有FROM
子句,但如果这是一个过滤查询,这是可以接受的。再说一遍,我不是 HQL/Hibernate 方面的专家,但我相信过滤器查询不是完整的查询,而是您使用定义的东西session.createFilter
(请参阅如何将项目排序 HQL 转换为过滤器查询?),所以这让我思考没有办法省略该FROM
子句。
归档时间: |
|
查看次数: |
9345 次 |
最近记录: |