gpt4 book ai didi

jpa - 元组结果标准 API 子查询

转载 作者:行者123 更新时间:2023-12-04 08:38:00 24 4
gpt4 key购买 nike

我正在尝试在我使用 JPA 2.0 类型安全标准 API 编写的应用程序中使用子查询,并将 Hibernate 3.6.1.Final 作为我的提供者。选择原始类型(Long、MyEntity 等)没有问题,但我想选择多个列。

这是一个完全合理的例子。忽略子查询的不必要使用——它只是为了说明。

    EntityManager em = getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createTupleQuery();

Subquery<Tuple> subQ = cq.subquery(Tuple.class);
Expression<Long> subqCount;
{
Root<MyEntity> root = subQ.from(MyEntity.class);
Path<MyEntity> filter = root.get(MyEntity.challenge);

subqCount = cb.count(root);

// How to select tuple?
Selection<Tuple> tuple = cb.tuple(filter, subqCount);

// !! Run-time exception here
Expression<Tuple> tupleExpr = (Expression<Tuple>) tuple;

// Not sure why I can't use multiSelect on a subQuery
// #select only accepts Expression<Tuple>
createSubQ.select(tupleExpr);

createSubQ.groupBy(filter);
}

cq.multiselect(subqCount);

尽管编译器没有提示,但我仍然收到运行时异常。
    java.lang.ClassCastException: org.hibernate.ejb.criteria.expression.CompoundSelectionImpl cannot be cast to javax.persistence.criteria.Expression
  • 这是休眠中的错误,还是我做错了什么?
  • 如果您不能使用 multiselect在子查询上,那么如何执行 groupBy ?
  • 如果您不能使用 groupBy在子查询上,为什么它在 API 中?
  • 最佳答案

    我也有同样的问题。

    我只能尝试通过说您只能真正使用子查询来执行非常简单的查询来回答您的最后一个问题,例如:

    SELECT name FROM Pets WHERE Pets.ownerID in (
    SELECT ID FROM owners WHERE owners.Country = "SOUTH AFRICA"
    )

    我想说的另一件事是这件事让我想起了多少 xkcd #979 .

    关于jpa - 元组结果标准 API 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5317649/

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