java - 如何正确确定 "exists"JPA Criteria Query 子句是否返回 true 或 false?

标签 java hibernate jpa criteria-api

我不知道如何执行返回 boolean 输出的 JPA 条件查询。

目标是在 Oracle 上呈现如下所示的标准查询:

select 1 from dual where exists ( ... );

我用子查询执行的 where exists (...) 部分。我正在为外部查询而苦苦挣扎。

这个的实际用途是确定 exists 子句中的子查询是否返回 truefalse

这是我写的:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

CriteriaQuery<Object> query = criteriaBuilder.createQuery();
query.from(Boolean.class);
query.select(criteriaBuilder.literal(true));

Subquery<Location> subquery = query.subquery(Location.class);
Root<Location> subRootEntity = subquery.from(Location.class);
subquery.select(subRootEntity);

Path<?> attributePath = subRootEntity.get("State");
Predicate predicate = criteriaBuilder.equal(attributePath, criteriaBuilder.literal("TX"));
subquery.where(predicate);
query.where(criteriaBuilder.exists(subquery));

TypedQuery<Object> typedQuery = em.createQuery(query);


最后一行输出错误,指出“Boolean 不是一个实体”。我认为我的问题是不知道如何表达查询的“from”部分,以便结果输出 1 或 0/true 或 false - 而不是实体。

我知道我可以检索任何实体,然后检查结果列表的大小是否为 1。

我在问如何获得 boolean 结果,既可以避免不必要的检索这些列的任务,也可以学习如何做。

这可能吗?

谢谢! 爱德华多

最佳答案

是的,这是可能的。假设您有一个对应于您的 dual 表的实体,您将希望在 CriteriaQuery#from 中使用该实体类。

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

CriteriaQuery<Boolean> query = criteriaBuilder.createQuery(Boolean.class);
query.from(dual.class);
query.select(criteriaBuilder.literal(true));

Subquery<Location> subquery = query.subquery(Location.class);
Root<Location> subRootEntity = subquery.from(Location.class);
subquery.select(subRootEntity);

Path<?> attributePath = subRootEntity.get("State");
Predicate predicate = criteriaBuilder.equal(attributePath, criteriaBuilder.literal("TX"));
subquery.where(predicate);
query.where(criteriaBuilder.exists(subquery));

TypedQuery<Boolean> typedQuery = em.createQuery(query);

关于java - 如何正确确定 "exists"JPA Criteria Query 子句是否返回 true 或 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728850/

相关文章:

java - Android 开发 - 编译正常,运行时崩溃

java - apache common-io 包会在真正的 IO 操作之前缓冲数据吗?

java - 尝试在模拟器中运行时应用程序崩溃

java - 双向 hibernate 关系

java - 克隆JPA实体,包括用spring的createdBy注释的值

java - 如何在媒体播放器android ImageView 中实现完成监听器

java - 我应该使用什么直接 FK 字段或实体对象?

java - 无法使用 jaxb 将 XML 持久保存到数据库

java - Hibernate 根据条件从数据库中检索结果

java - JPA/EclipseLink 与 MySQL 的并发问题