如何选择HQL中是否存在行

Ada*_*m A 6 sql hibernate hql

编辑:具体谈论查询没有表.是的我可以使用存在,但我必须这样做

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()似乎是第二好的替代方案,但如果我不需要,我不想处理表中的每一行.

Grz*_*zki 2

简短的回答:我相信这是不可能的。

我的推理:

根据在哪里可以找到所有 HQL 关键字的列表?Hibernate 项目并未在其网站上发布 HQL 语法,但它在 Hibernate 完整发行版中以.gANTLR 文件形式提供。

我对 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子句。