2012-06-11 201 views
2

我使用下面的代碼(嘗試)查詢數據庫:爲什麼setParameter沒有設置參數?

Query query = session.createQuery("from Trace where service = :service"); 
query.setParameter("service", clientRequest[0]); 

在哪裏的ClientRequest [0]是從一個字符串數組和服務變量是在我的POJO字符串映射到VARCHAR (45)在我的MySQL數據庫中。

當我運行這段代碼時,Hibernate顯示執行的SQL查詢爲:

Hibernate: select trace0_.traceId as traceId0_, trace0_.service as service0_, trace0_.longitude as longitude0_, trace0_.latitude as latitude0_, trace0_.timestamp as timestamp0_ from trace trace0_ where trace0_.service=? 

這使我相信,沒有被正確設定的ClientRequest的[0]值作爲參數。

我檢查過clientRequest [0]包含一個有效的字符串,它的確如此。我試圖創建一個查詢,但這些都沒有工作過的其他方式,他們總是表現出服務爲,而如果我用明顯的「?」:

Query query = session.createQuery("from Trace where service = 21"); 

它自然給出

正確的響應
Hibernate: select trace0_.traceId as traceId0_, trace0_.service as service0_, trace0_.longitude as longitude0_, trace0_.latitude as latitude0_, trace0_.timestamp as timestamp0_ from trace trace0_ where trace0_.service=21 

什麼可能會阻止setParamater正常工作?

回答

6

預計日誌輸出。 Hibernate不會在查詢字符串中記錄參數。參數設置正確。當參數未設置時,您會看到異常。

如果您還想記錄參數值,可以從here找到一些說明。

+1

太棒了。在我確認之前,我會檢查一下並做一些測試以確認。非常感謝你。 –

+0

剛剛確認參數正確添加後,我無法在一分鐘內記錄日誌,但您的答案完全正確。再次感謝! –

相關問題