我想知道如何在投影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))))
当DB中的pronostico表为空时,pronostico.nropack.sum()中返回的值为null,但我想为零。我像这样尝试合并: pronostico.nropack.sum()。聚结(0)
..但我没有答案。而不是那样,我得到一个Cast异常:无法将Long转换为整数......
有人有答案吗?
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 :(得分:3)
这对某些人也有用。在执行聚合求和操作时,您可能希望将空值视为0。如果你想要正确的排序,空值和0排序,这主要是有用的。
QMyEntity myEntity = QMyEntity.myEntity;
from(myEntity).list(new QMyProjectionClass(
(NumberExpression<Double>) myEntity.minutes.coalesce(0d).asNumber().sum()
));
这导致本机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。
答案 1 :(得分:0)
试试这个: pronostico.nropack.sum()。聚结(BigDecimal.ZERO)