2011-10-25 60 views
0

我有一個SQL語句,其中包含類的名稱而不是表的名稱。 然後我使用一個ResultTransformer將結果映射到一個bean中,但是Hibernate不會在具有Oracle能力的查詢中轉換該查詢(使用類)。 的代碼是這樣的:Hibernate SQL Transformation

Session sx = hibernateTemplate.getSessionFactory().openSession(); 
    SQLQuery q = sx.createSQLQuery(queryUser); 
    sottoInterventiPagatiList = (List<SottoInterventiPagatiBean>)q.setResultTransformer(Transformers.aliasToBean(SottoInterventiPagatiBean.class)).list(); 

查詢是:

select pagaSott.codiSequPagaSottInte as codiSequPagaSottInte, 
     pagaSott.impoSostSottInte as impoSostSottInte, 
     pagaSott.impoRichSottInte as impoRichSottInte, 
     pagaSott.impoAcceSottInte as impoAcceSottInte, 
     pagaSott.impoAmmeSottInte as impoAmmeSottInte, 
     pagaSott.codiSottTipo as codiSottTipo,   
     pagaInte.tabAgriPsrClTipoInt.codiTipo as codiTipo, 
     ammiDomaAiut.descSottTipo as descSottTipo, 
     ammiDomaAiut.impoSpesTotaAmme as impoSpesTotaAmme, 
     ammiDomaAiut.impoTotaAmme as impoTotaAmme 
from AmmissibilitaDomandaAiuto ammiDomaAiut, 
     PagamentiDoma pagaDoma, 
     PagaInte pagaInte, PagaSottInte pagaSott 
where pagaDoma.codiDomaAiut = ammiDomaAiut.domandaByCodiDomaAiut.codiDoma 
and pagaDoma.tabAgriPsrClMisure.codiMisu = ammiDomaAiut.misure.codiMisu 
and pagaInte.tabAgriPsrPagamentiDoma.codiSequPagaDoma = pagaDoma.codiSequPagaDoma 
and pagaInte.tabAgriPsrClTipoInt.codiTipo = ammiDomaAiut.tipiIntervento.codiTipo 
and pagaSott.tabAgriPsrPagaInte.codiSequPagaInte = pagaInte.codiSequPagaInte 
and pagaSott.codiSottTipo = ammiDomaAiut.sottoTipiIntervento.codiSottTipo 
and ammiDomaAiut.domandaByCodiDomaAiut.codiDoma = 13 
and ammiDomaAiut.misure.codiMisu = 6 

豆是:

public class SottoInterventiPagatiBean implements Serializable{ 
    private static final long serialVersionUID = -1831093835824406823L; 
    private Integer codiSequPagaSottInte; 
    private Integer codiTipo; 
    private BigDecimal codiSottTipo; 
    private String descSottTipo; 
    private BigDecimal impoSostSottInte; 
    private BigDecimal impoRichSottInte; 
    private BigDecimal impoAcceSottInte; 
    private BigDecimal impoAmmeSottInte; 
    private BigDecimal impoSpesTotaAmme; 
    private BigDecimal impoTotaAmme; 

    public Integer getCodiSequPagaSottInte() { 

     return codiSequPagaSottInte; 
    } 

    public void setCodiSequPagaSottInte(Integer codiSequPagaSottInte) { 

     this.codiSequPagaSottInte = codiSequPagaSottInte; 
    } 

    public Integer getCodiTipo() { 

     return codiTipo; 
    } 

    public void setCodiTipo(Integer codiTipo) { 

     this.codiTipo = codiTipo; 
    } 

    public BigDecimal getCodiSottTipo() { 

     return codiSottTipo; 
    } 

    public void setCodiSottTipo(BigDecimal codiSottTipo) { 

     this.codiSottTipo = codiSottTipo; 
    } 

    public String getDescSottTipo() { 

     return descSottTipo; 
    } 

    public void setDescSottTipo(String descSottTipo) { 

     this.descSottTipo = descSottTipo; 
    } 

    public BigDecimal getImpoSostSottInte() { 

     return impoSostSottInte; 
    } 

    public void setImpoSostSottInte(BigDecimal impoSostSottInte) { 

     this.impoSostSottInte = impoSostSottInte; 
    } 

    public BigDecimal getImpoRichSottInte() { 

     return impoRichSottInte; 
    } 

    public void setImpoRichSottInte(BigDecimal impoRichSottInte) { 

     this.impoRichSottInte = impoRichSottInte; 
    } 

    public BigDecimal getImpoAcceSottInte() { 

     return impoAcceSottInte; 
    } 

    public void setImpoAcceSottInte(BigDecimal impoAcceSottInte) { 

     this.impoAcceSottInte = impoAcceSottInte; 
    } 

    public BigDecimal getImpoAmmeSottInte() { 

     return impoAmmeSottInte; 
    } 

    public void setImpoAmmeSottInte(BigDecimal impoAmmeSottInte) { 

     this.impoAmmeSottInte = impoAmmeSottInte; 
    } 

    public BigDecimal getImpoSpesTotaAmme() { 

     return impoSpesTotaAmme; 
    } 

    public void setImpoSpesTotaAmme(BigDecimal impoSpesTotaAmme) { 

     this.impoSpesTotaAmme = impoSpesTotaAmme; 
    } 

    public BigDecimal getImpoTotaAmme() { 

     return impoTotaAmme; 
    } 

    public void setImpoTotaAmme(BigDecimal impoTotaAmme) { 

     this.impoTotaAmme = impoTotaAmme; 
    } 

}

+0

分享您的查詢和SottoInterventiPagatiBean代碼。 – ManuPK

回答

0

使用session.createQuery(...)而不是createSQLQuery(...)。 createSQLQuery創建一個SQL查詢,hibernate假定你的查詢已經是sql格式,那麼沒有其他轉換完成。

+0

太棒了!有用! – zulyo