JPQL语句返回布尔值

Pio*_*zyk 35 select jpa jpql jpa-2.0

是否可以编写如下的JPQL查询:

select count(*) > 0 from Scenario scen where scen.name = :name

这将返回true/false布尔值,具体取决于是否存在实体填充标准?

我想以这种方式使用查询:

boolean exists = entityManager.createQuery(query,Boolean.class).setParameter("name",name).getSingleResult();
Run Code Online (Sandbox Code Playgroud)

我的例子中的查询在语法上是不正确的(解析错误),但有没有正确的方法在JPQL中进行检查,这会返回布尔值,还是只能在Java代码中进行?

Mik*_*unu 56

是的,可以通过以下方式:

select case when (count(scen) > 0)  then true else false end  
from Scenario scen where scen.name = :name
Run Code Online (Sandbox Code Playgroud)

  • 这个QUERY返回一个`Integer`而不是`Boolean`这是正常的吗? (4认同)
  • 对不起,这是一个有效的JPQL,它在JPA 1.0中无效. (3认同)
  • 我使用答案中的确切语法将它用作 Spring Data JPA 存储库上的 @Query 注释。 (3认同)

Ste*_*erl 13

怎么样:

select count(scen) > 0
from Scenario scen where scen.name = :name
Run Code Online (Sandbox Code Playgroud)

  • :) Hibernate 恕我直言,最容易被误解和炒作的“功能”之一。在没有任何彻底的迁移计划和代码更改的情况下,您永远不会只是交换企业数据库,至少在任何合理规模的项目中都是如此。如果有人真的想从 Postgres 切换到 M$SQL,无论如何你都必须测试你的代码库。修复查询并完成它。只是不要从一开始就编写复杂的查询,只是因为您*可能*将来某个时候需要它(您永远不会!) (3认同)
  • IntelliJ IDEA 抱怨“>”运算符,直到我在比较两边加上括号:“(count(scen) > 0)”。 (3认同)