2014-12-05 67 views
0
參數

我試圖運行這個命令:createSQLQuery,在Hibernate

.. 
String modelTableName = (model == TableModelType.RING) ? "RING_PLAYERS" : "TOURNY_PLAYERS"; 

List<Object[]> results = dbs.createSQLQuery("SELECT group_level, COUNT(group_level) FROM :modelTableName WHERE game_id=:gameId GROUP BY group_level") 
       .addScalar("group_level", Hibernate.INTEGER) 
       .addScalar("COUNT(group_level)", Hibernate.LONG) 
       .setString("modelTableName", getModelTableName()) 
       .setInteger("gameId", getGameId()) 
       .list(); 

它給出了一個例外:

Caused by: java.sql.SQLException: ORA-00903: invalid table name 

如果我寫 「RING_PLAYERS」 而不是 「:tableModelName」,那麼它的工作原理!

我在做什麼錯誤的這個參數?

謝謝。

+0

'getModelTableName()'沒有此方法獲得你的價值預期? – 2014-12-05 18:20:11

+0

是的。 爲了檢查createSQLQuery是否正常工作,使用硬編碼字符串而不是函數會很有趣。 – Shvalb 2014-12-05 18:47:36

+0

好吧,你是否在靜態路試過,如果你的代碼風格適合這種情況,或者字符串初始化並在setString方法中使用它? – 2014-12-05 18:54:40

回答

1

根據這個答案,你不能注入表名:Table name as parameter in HQL

您可能必須構建它:

List<Object[]> results = dbs.createSQLQuery("SELECT group_level, COUNT(group_level) FROM " + getModelTableName() + " WHERE game_id=:gameId GROUP BY group_level") 
       .addScalar("group_level", Hibernate.INTEGER) 
       .addScalar("COUNT(group_level)", Hibernate.LONG) 
       .setInteger("gameId", getGameId()) 
       .list(); 
+0

這是一個有效的解決方案... – Shvalb 2014-12-05 22:34:39

相關問題