我试图运行一个查询,该查询检查某些条件是否为真,并将一个简单的布尔结果作为输出返回。使它稍微棘手的是,其中一个条件是测试是否没有返回一组标准的结果。
目前,我正在使用带有hibernate的JPA-2.0作为我的提供者,并得到MySQL的支持。我得到了一个在MySQL中运行良好的示例查询,但是当试图让它在JPQL中运行时,它失败了。MySQL查询看起来有点像这样:
Select exists(Select statement with criteria)
or not exists(Select statement with criteria);我也使用CASE获得了相同的输出,但是JPQL不支持该语句。
无论如何,当我试图在JPQL中使用类似的查询时,我会得到以下错误:
“子树的意外结束”
根据我的理解,这意味着查询中缺少了一些东西。有人知道怎么修吗?
发布于 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 ::=不存在(子查询)
发布于 2015-06-15 09:27:35
可以使用案例表达执行布尔查询。
从JPA2.0 (Java 6)开始,您可以使用创建一个TypedQuery。
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)中,必须使用非类型化查询。
Query booleanQuery = entityManager.createQuery(query);
boolean exists = (Boolean) booleanQuery.getSingleResult();发布于 2018-05-12 22:33:23
在一个使用Hibernate 5.2 (它支持JPA 2.1)和Spring Data Jpa 2.0.6的项目中,我成功地使用了这个JPQL查询:
@Query("SELECT COUNT(c) > 0 FROM Contract c WHERE c.person.id = :pid")
Boolean existContractForPerson(@Param("pid") Long personId);在日志中,我看到生成的本机查询如下:
select count(contract0_.contract_id)>0 as col_0_0_ from contracts contract0_ where contract0_.fk_person_id=?https://stackoverflow.com/questions/6804077
复制相似问题