2014-12-05 49 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

相关问题