QueryDSL:不支持的表达式总和
QueryDSL: Unsupported expression sum
我有这个 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;
}
我尝试将我的查询结果绑定到上面的对象。我第一次尝试使用 QueryDSL 是这样的(它的工作原理是数据的呈现是正确的,但它没有将 属性 的查询绑定到对象,因为它返回 Tuple
其中包含 StringPath
、NumberExpression
和其他对我来说很奇怪的数据类型)
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 只能处理路径和别名表达式。
我有这个 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;
}
我尝试将我的查询结果绑定到上面的对象。我第一次尝试使用 QueryDSL 是这样的(它的工作原理是数据的呈现是正确的,但它没有将 属性 的查询绑定到对象,因为它返回 Tuple
其中包含 StringPath
、NumberExpression
和其他对我来说很奇怪的数据类型)
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 只能处理路径和别名表达式。