gpt4 book ai didi

JPA 2.0、Criteria API、子查询、表达式

转载 作者:行者123 更新时间:2023-12-03 00:45:14 26 4
gpt4 key购买 nike

我多次尝试编写带有子查询和 IN 表达式的查询语句。但我从来没有成功过。

我总是遇到异常,“关键字'IN'附近的语法错误”,查询语句是这样构建的,

SELECT t0.ID, t0.NAME
FROM EMPLOYEE t0
WHERE IN (SELECT ?
FROM PROJECT t2, EMPLOYEE t1
WHERE ((t2.NAME = ?) AND (t1.ID = t2.project)))

我知道“IN”之前的单词。

你写过这样的查询吗?有什么建议吗?

最佳答案

下面是使用 Criteria API 使用子查询的伪代码。

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root<EMPLOYEE> from = criteriaQuery.from(EMPLOYEE.class);
Path<Object> path = from.get("compare_field"); // field to map with sub-query
from.fetch("name");
from.fetch("id");
CriteriaQuery<Object> select = criteriaQuery.select(from);

Subquery<PROJECT> subquery = criteriaQuery.subquery(PROJECT.class);
Root fromProject = subquery.from(PROJECT.class);
subquery.select(fromProject.get("requiredColumnName")); // field to map with main-query
subquery.where(criteriaBuilder.and(criteriaBuilder.equal("name",name_value),criteriaBuilder.equal("id",id_value)));

select.where(criteriaBuilder.in(path).value(subquery));

TypedQuery<Object> typedQuery = entityManager.createQuery(select);
List<Object> resultList = typedQuery.getResultList();

而且它肯定需要一些修改,因为我已尝试根据您的查询来映射它。这是一个链接http://www.ibm.com/developerworks/java/library/j-typesafejpa/这很好地解释了概念。

关于JPA 2.0、Criteria API、子查询、表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4483576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com