2012-08-04 135 views
1

請幫我解決我的問題 - 如果我在sqlplus中運行相同的查詢,它工作正常。休眠HQL查詢拋出異常

net.sf.hibernate.QueryException: , expected in SELECT [SELECT SUM(CASE WHEN s.SettlementCurrencyName = r.ContractCurrency THEN p.ContractNet WHEN s.SettlementCurrencyName = r.LocalCurrency THEN p.ContractNet/ta.LiquidationRate WHEN s.SettlementCurrencyName IS NULL THEN p.ContractNet/ta.LiquidationRate ELSE p.ContractNet/ta.LiquidationRate END)"PAID AMOUNT", COUNT(t.TX_IDENTIFIER) "PAID TXS" FROM com.uniteller.txcore.Payment p, com.uniteller.txcore.Transaction t, com.uniteller.txcore.TxAccounting ta, com.uniteller.txcore.Remittance r, com.uniteller.txcore.SellingAgentSettlement s WHERE t.isLRCTx = 1 AND t.SellingCompany = :lrcCode AND s.SettlementCurrencyName(+) = r.ContractCurrency AND s.Id.DestCurrencyName(+) = r.ContractCurrency AND s.Id.Code(+) = r.SellingAgent AND r.ContractCurrency = :contractCurrency AND p.PaidAccountDt > :lastPaidAcDt AND p.TxIdentifier = t.TxIdentifier AND p.TxIdentifier = r.TxIdentifier AND p.TxIdentifier = ta.TxIdentifier] 
at net.sf.hibernate.hql.SelectParser.token(SelectParser.java:169) 
at net.sf.hibernate.hql.ClauseParser.token(ClauseParser.java:87) 
at net.sf.hibernate.hql.ClauseParser.end(ClauseParser.java:114) 
at net.sf.hibernate.hql.PreprocessingParser.end(PreprocessingParser.java:143) 
at net.sf.hibernate.hql.ParserHelper.parse(ParserHelper.java:30) 
at net.sf.hibernate.hql.QueryTranslator.compile(QueryTranslator.java:149) 
at net.sf.hibernate.hql.QueryTranslator.compile(QueryTranslator.java:138) 
at net.sf.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:295) 
at net.sf.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1572) 
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1543) 
at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:49) 
at com.uniteller.tools.databroker.Main.main(Main.java:85) 
+1

之間有一個空格)「,它很難調試這麼長時間的查詢嘗試刪除。逐個部分,看看導致失敗的部分是什麼。比解決小問題的問題。 – 2012-08-04 07:36:30

+0

如果您發佈一些代碼而不是長時間生成的hql,社區可以更好地幫助您。問題可能在於你的邏輯/代碼而不是hql。 – 2012-08-04 21:26:15

+0

@Satadru Biswas異常消息相當清晰「,期望在SELECT中」 - 我認爲問題在於HQL – JamesB 2012-08-04 23:41:40

回答

1

我覺得這個問題可以在您嘗試執行查詢的HQL查詢:

Query query = session.createQuery(...); 

但是,當我看到你的查詢不是HQL,這就是爲什麼你應該執行它作爲母語SQL查詢:

SQLQuery query = session.createSQLQuery(...); 
+0

:lrcCode - 這是HQL,而不是SQL – JamesB 2012-08-04 08:34:55

+0

是的,我錯過了這個。抱歉 – dimas 2012-08-04 08:55:10

0

)「已付金額」的需求和