我在用Oracle11g使用hibernate 4.2.1。在翻譯NamedQuery的過程中,顯然hibernate會生成無效的SQL語句。該NamedQuery如下:Hibernate用oracle生成無效的sql
SELECT retenues FROM EnsembleRetenuesPrestation retenues
WHERE EXISTS (SELECT calcul FROM CalculRetenueGlobale calcul
WHERE calcul.id.payementPrestation.id = :payementId
AND calcul.id.ensembleRetenuesPrestation.id = retenues.id)
CalculRetenueGlobale是一個連接表EnsembleRetenuesPrestation和PayementPrestation(有一些附加字段所以這是一個真正的實體。)。它使用嵌入式密鑰作爲包含兩個實體CalculRetenueGlobale和PayementPrestation的主鍵。
生成的SQL如下:
select
ensemblere0_.ERP_ID_ENSEMBLE_RET_PREST as ERP1_24_,
ensemblere0_.ERP_AAAAMM_ARRERAGES as ERP2_24_,
ensemblere0_.ERP_CODE_CALCUL_SIMUL as ERP3_24_,
ensemblere0_.ERP_ID_EXCEDENT_RETENUE as ERP19_24_,
ensemblere0_.ERP_FLAG_5E_TRANCHE_CESSION as ERP4_24_,
ensemblere0_.ERP_FLAG_ARRERAGES as ERP5_24_,
ensemblere0_.ERP_MONTANT_APRES_RETENUES as ERP6_24_,
ensemblere0_.ERP_MONTANT_AVANT_RETENUES as ERP7_24_,
ensemblere0_.ERP_MONTANT_CESSIBLE as ERP8_24_,
ensemblere0_.ERP_MONTANT_INCESS_INSAISISS as ERP9_24_,
ensemblere0_.ERP_MONTANT_SAISISSABLE as ERP10_24_,
ensemblere0_.ERP_RETENUE_ACOMPTE as ERP11_24_,
ensemblere0_.ERP_RETENUE_ACOMPTE_FIXE as ERP12_24_,
ensemblere0_.ERP_RETENUE_CONJOINT_TIERS as ERP13_24_,
ensemblere0_.ERP_RETENUE_FAILLITE as ERP14_24_,
ensemblere0_.ERP_RETENUE_SURENDETTEMENT as ERP15_24_,
ensemblere0_.ERP_SOM_RET_ALIM as ERP16_24_,
ensemblere0_.ERP_SOM_RET_CESSION as ERP17_24_,
ensemblere0_.ERP_SOM_RET_SAISIES as ERP18_24_
from
CCRSC.ENSEMBLE_RET_PREST ensemblere0_
where
exists (
select
(calculrete1_.CAL_ID_CREANCE,
calculrete1_.CAL_ID_ENSEMBLE_RET_PREST,
calculrete1_.CAL_ID_PAIEMENT)
from
CCRSC.CALC_RET_GLOBALE calculrete1_
where
calculrete1_.CAL_ID_PAIEMENT=1
and calculrete1_.CAL_ID_ENSEMBLE_RET_PREST=ensemblere0_.ERP_ID_ENSEMBLE_RET_PREST
)
結果ORA-00907:缺少右括號。如果我刪除這部分兩個括號我可以執行沒有問題的查詢(在的SQLDeveloper爲例):
select
(calculrete1_.CAL_ID_CREANCE,
calculrete1_.CAL_ID_ENSEMBLE_RET_PREST,
calculrete1_.CAL_ID_PAIEMENT)
我只能找到一個老問題(https://hibernate.atlassian.net/browse/HHH-2409),但在這種情況下,他們指責「AS '這個關鍵詞在這種情況下似乎不成問題。
有沒有人遇到過類似的問題?這可能是一個映射問題嗎?
由於提前,
亞歷
聽起來像Oracle查詢分析器再次被討厭的..;) –