Select 返回布尔值的JPQL语句
是否可以编写如下所示的JPQL查询:Select 返回布尔值的JPQL语句,select,jpa,jpa-2.0,jpql,Select,Jpa,Jpa 2.0,Jpql,是否可以编写如下所示的JPQL查询: select case when (count(scen) > 0) then true else false end from Scenario scen where scen.name = :name 从场景场景中选择count(*)>0,其中scen.name=:name 根据实体填充条件是否存在返回真/假布尔值 我想这样使用查询: boolean exists = entityManager.createQuery(query,Bool
select case when (count(scen) > 0) then true else false end
from Scenario scen where scen.name = :name
从场景场景中选择count(*)>0,其中scen.name=:name
根据实体填充条件是否存在返回真/假布尔值
我想这样使用查询:
boolean exists = entityManager.createQuery(query,Boolean.class).setParameter("name",name).getSingleResult();
我的示例中的查询在语法上并不正确(解析错误),但是否有任何正确的方法来执行JPQL中的检查,该检查将返回布尔值,还是仅在Java代码中才可能执行?是的,可以执行以下操作:
select case when (count(scen) > 0) then true else false end
from Scenario scen where scen.name = :name
那么,仅仅:
select count(scen) > 0
from Scenario scen where scen.name = :name
我也遇到了同样的问题,然后我将我的hibernate更新为4.3.11.Final,现在它可以工作了。事实上,这句话是有效的
HQL
,但无效的JPQL
@Oleksandr Bondarenko,这是可能的,但不幸的是,我无法识别为什么它不是有效的JQPL,你能解释一下吗?对不起,这是有效的JPQL,它在JPA 1.0中无效。此查询返回的是整数
而不是布尔值
,这正常吗?我让它在Spring数据JPA存储库上使用答案中的确切语法作为@QUERY注释工作。选择NEW java.lang.Boolean(count(*)>0)
应该可以工作。也许您可以省略包声明,我现在没有机会尝试它。奇怪,但我得到了以下错误:org.hibernate.hql.ast.QuerySyntaxException:无法在类[java.lang.Boolean][select new java.lang.Boolean(count(*)>0)上找到合适的构造函数从…
开始,尝试确定此查询返回的内容-我的意思是tryObject exists=entityManager.createQuery(…
),然后在调试模式下查看存在对象的类型和值即使在当前Hibernate 5.2.12中,此语句也不适用于所有数据库。它适用于H2,但不适用于MSSQL,而不是“case when then…”适用于两个数据库(希望是所有数据库):我认为大多数项目从未从其他表迁移到MSSQL:)最容易被误解和炒作的“特性”之一Hibernate IMHO的。在没有任何彻底的迁移计划和代码更改的情况下,您永远不会交换您的企业数据库,至少在任何合理规模的项目中是这样。如果有人真的想从say Postgres切换到M$SQL,您将不得不测试您的代码库。修复查询并完成它。只是不要编写复杂的查询从一开始,IntelliJ IDEA就抱怨
操作符,因为你可能在将来某个时候需要它(你永远不会!),直到我用括号括住比较:(count(scen)>0)
@JensPiegsa我想他们已经解决了这个问题,现在它不用括号就可以工作了