gpt4 book ai didi

java - 如何为 JPA Criteria Group By 子句创建表达式列表?

转载 作者:行者123 更新时间:2023-11-30 07:17:18 26 4
gpt4 key购买 nike

我正在尝试使用 groupBy 子句创建 JPA Criteria 查询。就我而言,我的 groupBy 子句是动态的,所以我尝试使用它:

CriteriaQuery<T> groupBy(List<Expression<?>> grouping);

而不是通常的:

CriteriaQuery<T> groupBy(Expression<?>... grouping);

问题是我正在努力创建这个表达式列表。这是我目前的代码:

    CriteriaQuery<Tuple> criteria = cb.createTupleQuery();
Root<Foo> foo = criteria.from(Foo.class);

Expression<String> barExp = foo.get("bar");
Expression<String> bazExp = foo.get("baz");

// I'd like to use a Expression List to build a dynamic group by clause with this. But something looks wrong and I don't know where...
List<Expression<String>> groupBy = Arrays.asList(barExp, bazExp);

// Consulta
criteria.multiselect(barExp, bazExp);
criteria.where(where);

// this works:
criteria.groupBy(barExp, bazExp);
// but I'd like to use this, but compiler give me a type error
//criteria.groupBy(groupBy);

TypedQuery<Tuple> query = em.createQuery(criteria);
List<Tuple> result = query.getResultList();

所以就是这样了。如何为 groupBy 动态创建 JPA 2 Criteria 表达式列表?

提前致谢!

最佳答案

在这里回答我自己的问题,希望这对其他人有用。

经过一番思考,我发现:

List<Expression<String>>

编译器试图使用不需要的重载版本:

CriteriaQuery<T> groupBy(Expression<?>... grouping);

而不是我想要的版本:

CriteriaQuery<T> groupBy(List<Expression<?>> grouping);

Eclipse 帮助我修复了代码中的类型错误:

// ...

Expression<?> barExp = foo.get("bar");
Expression<?> bazExp = foo.get("baz");
List<Expression<?>> groupBy = Arrays.asList(codigoUGR, codigoGND);

// ...
criteria.groupBy(groupBy);

这似乎可以解决问题。Java 通配符语法(“?”)对我来说有点陌生,但是 eclipse 快速修复建议再次拯救了我们:)

关于java - 如何为 JPA Criteria Group By 子句创建表达式列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38148414/

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