gpt4 book ai didi

QueryDSL:不支持的表达式总和

转载 作者:行者123 更新时间:2023-12-01 11:30:43 25 4
gpt4 key购买 nike

我有这个 Bean 对象:

@Entity
@Table(name="a_table")
public class A {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name="amount")
private int amount;

@ManyToOne
private B b;

@ManyToOne
private C c;

public MunicipalityInventory(int amount, B b, C c) {
this.amount = amount;
this.b = b;
this.c = c;
}

我尝试将我的查询结果绑定(bind)到上面的对象。我对 QueryDSL 的第一次尝试是这样的(从这个意义上说,它的工作原理是数据的表示是正确的,但它没有将查询的属性绑定(bind)到对象,因为它返回 Tuple 包含 StringPathNumberExpression 和其他奇怪的数据类型为了我)
public List<Tuple> findAll(){
QA a = QA.A;
QB b = QB.b;
QC c = QC.c;

JPAQuery query = new JPAQuery(entityManager);

return query.from(a)
.innerJoin(a.b, b)
.innerJoin(a.c, c)
.orderBy(c.name.asc())
.groupBy(c.name, a.c, c.name)
.list(a.amount.sum(), b.name, c.name);
}

正如我所说,这有效,但现在我正试图将该示例转换为这个(哦,并且需要 groupBy 中的新条件来获得此编译)所以我可以立即使用适当的对象:
    return query.from(a)
.innerJoin(a.b, b)
.innerJoin(a.c, c)
.orderBy(b.name.asc())
.groupBy(c.name, a.amount, b.id, c.id)
.list(Projections.fields(A.class, a.amount.sum(), b, c));

编译时会给出错误警告
java.lang.IllegalArgumentException: Unsupported expression sum(a.amount)
at com.mysema.query.types.QBean.createBindings(QBean.java:70)

为什么?据我了解,这应该有效。

最佳答案

Querydsl 无法从 sum() 表达式中确定要填充 A 的哪个字段。

使用别名来定义目标字段:

a.amount.sum().as("fieldName")

Querydsl 在绑定(bind)到字段或属性时只能处理路径和别名表达式。

关于QueryDSL:不支持的表达式总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32312622/

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