gpt4 book ai didi

java - 如何使用 QueryDSL 将结果投影中的空值设置为零

转载 作者:行者123 更新时间:2023-12-04 04:12:59 26 4
gpt4 key购买 nike

我想知道如何在投影中设置空值 pronostico2.nropack.sum()...

new HibernateSubQuery().from(pronostico)
.where(pronostico.aeropuerto.eq(vuelo.aeropuertoDestino)
.and(pronostico.fechareg.before(fechaHoraSimulacion)))
.unique(pronostico.nropack.sum()).loe(aeropuerto.cappack.subtract(vuelo.numpack))))

当数据库中的 pronostico 表为空时,pronostico.nropack.sum() 中返回的值为空,但我想为零。我试过这样合并: pronostico.nropack.sum().coalesce(0)

.. 但我没有得到任何答复。取而代之的是,我得到了一个 Cast Exception: Cannot convert Long to Integer...

有人有答案吗?

PD:完整的查询是:

    QVuelo vuelo = QVuelo.vuelo;
QAvion avion = QAvion.avion;
QTipoAvion tipoAvion = QTipoAvion.tipoAvion;
QAeropuerto aeropuerto = QAeropuerto.aeropuerto;
QPronostico pronostico = QPronostico.pronostico;
QPronostico pronostico2 = new QPronostico("pronostico2");

List<Vuelo> vuelos = consulta.from(vuelo)
.innerJoin(vuelo.avion, avion)
.innerJoin(avion.tipoAvion, tipoAvion)
.innerJoin(vuelo.aeropuertoDestino, aeropuerto)
.where(vuelo.aeropuertoOrigen.idaeropuerto.eq(idAeropuertoActual)
.and(vuelo.salidaest.after(fechaHoraSimulacion))
.and((vuelo.numpack.add(nroPaquetes).loe(tipoAvion.cappack)))
.and(new HibernateSubQuery().from(pronostico)
.where(pronostico.aeropuerto.eq(vuelo.aeropuertoDestino)
.and(pronostico.fechareg.before(fechaHoraSimulacion)))
.unique(pronostico.nropack.sum()).loe(aeropuerto.cappack.subtract(vuelo.numpack))))
.list(vuelo);

最佳答案

这也可能对某些人有用。当您执行聚合求和运算时,您可能希望将空值视为 0。如果您想要正确排序、null 和 0 排序不同,这主要有用。

QMyEntity myEntity = QMyEntity.myEntity;

from(myEntity).list(new QMyProjectionClass(
(NumberExpression<Double>) myEntity.minutes.coalesce(0d).asNumber().sum()
));

这会生成 native SQL(在本例中为 Oracle):

sum(nvl(myentity1_.minutes, 0))

实体:

@Entity
public class MyEntity {

...
private Double minutes;

public Double getMinutes() {
return minutes;
}

}

投影类:

public class MyProjectionClass {

private Double totalMinutes;

@QueryProjection
public MyProjectionClass(Double totalMinutes) {
this.totalMinutes = totalMinutes;
}
}

注意:运行 maven-apt-plugin 会生成 Querydsl 元模型类 QMyEntity 和 QMyprojectionClass。

关于java - 如何使用 QueryDSL 将结果投影中的空值设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13319628/

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