2012-11-10 62 views
2

我想知道如何設置投影pronostico2.nropack.sum()null值...如何在結果投影空值設置到零QueryDSL

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()中返回的值爲null,但我希望爲零。我嘗試像這樣合併: pronostico.nropack.sum()。coalesce(0)

..但我沒有得到答案。而不是那個,我得到一個演員異常:不能將長整數轉換爲整數...

有人有答案嗎?

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

你能提交Bug爲此這裏https://github.com/mysema/querydsl/issues。 –

回答

2

這也可能是有用的人。在執行彙總和操作時,您可能希望將空值作爲0處理。如果你想要正確的排序,空值和0排序不同,這主要是有用的。

QMyEntity myEntity = QMyEntity.myEntity; 

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

這將導致本地SQL(甲骨文在這種情況下):

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會生成Que rydsl元模型類QMyEntity和QMyprojectionClass。

0

試試這個: pronostico.nropack.sum()合併(BigDecimal.ZERO)