首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JPQL中是否可以选择存在()?

在JPQL中是否可以选择存在()?
EN

Stack Overflow用户
提问于 2011-07-24 00:01:40
回答 7查看 54.2K关注 0票数 31

我试图运行一个查询,该查询检查某些条件是否为真,并将一个简单的布尔结果作为输出返回。使它稍微棘手的是,其中一个条件是测试是否没有返回一组标准的结果。

目前,我正在使用带有hibernate的JPA-2.0作为我的提供者,并得到MySQL的支持。我得到了一个在MySQL中运行良好的示例查询,但是当试图让它在JPQL中运行时,它失败了。MySQL查询看起来有点像这样:

代码语言:javascript
复制
Select exists(Select statement with criteria) 
  or not exists(Select statement with criteria);

我也使用CASE获得了相同的输出,但是JPQL不支持该语句。

无论如何,当我试图在JPQL中使用类似的查询时,我会得到以下错误:

“子树的意外结束”

根据我的理解,这意味着查询中缺少了一些东西。有人知道怎么修吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-07-24 17:39:16

这个答案已经过时了。请参阅 雷内链接的正确答案

不这是不可能的。

请参阅oracle的JPQL BNF文档。

simple_cond_expression ::=,comparison_expression,between_expression,between_expression,like_expression,in_expression,null_comparison_expression,null_comparison_expression,empty_collection_comparison_expression,collection_member_expression exists_expression ::=不存在(子查询)

票数 8
EN

Stack Overflow用户

发布于 2015-06-15 09:27:35

可以使用案例表达执行布尔查询。

从JPA2.0 (Java 6)开始,您可以使用创建一个TypedQuery

代码语言:javascript
复制
String query = "select case when (count(*) > 0)  then true else false end from ......"
TypedQuery<Boolean> booleanQuery = entityManager.createQuery(query, Boolean.class);
boolean exists = booleanQuery.getSingleResult();

在JPA1.0 (Java 5)中,必须使用非类型化查询。

代码语言:javascript
复制
Query booleanQuery = entityManager.createQuery(query);
boolean exists = (Boolean) booleanQuery.getSingleResult();
票数 25
EN

Stack Overflow用户

发布于 2018-05-12 22:33:23

在一个使用Hibernate 5.2 (它支持JPA 2.1)和Spring Data Jpa 2.0.6的项目中,我成功地使用了这个JPQL查询:

代码语言:javascript
复制
@Query("SELECT COUNT(c) > 0 FROM Contract c WHERE c.person.id = :pid")
Boolean existContractForPerson(@Param("pid") Long personId);

在日志中,我看到生成的本机查询如下:

代码语言:javascript
复制
select count(contract0_.contract_id)>0 as col_0_0_ from contracts contract0_ where contract0_.fk_person_id=?
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6804077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档