Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select 返回布尔值的JPQL语句_Select_Jpa_Jpa 2.0_Jpql - Fatal编程技术网

Select 返回布尔值的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

是否可以编写如下所示的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,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)上找到合适的构造函数从…
开始,尝试确定此查询返回的内容-我的意思是try
Object 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我想他们已经解决了这个问题,现在它不用括号就可以工作了