Java 在Hibernate中使用参数创建SQLQuery
我正在尝试运行以下命令:Java 在Hibernate中使用参数创建SQLQuery,java,hibernate,Java,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
..
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();
如果我写“RING_PLAYERS”而不是“:tableModelName”,那么它就可以工作了
这个参数有什么问题
谢谢。根据此答案,您不能插入表名: 您可能需要将其构造为:
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();
List results=dbs.createSQLQuery(“从“+getModelTableName()+”中选择组\级别、计数(组\级别),其中game\ id=:gameId按组\级别分组”)
.addScalar(“组\级别”,Hibernate.INTEGER)
.addScalar(“计数(组\级别)”,Hibernate.LONG)
.setInteger(“gameId”,getGameId())
.list();
getModelTableName()
此方法是否按预期获取您的值?是的。将硬编码的字符串而不是函数放在一起只是为了检查createSQLQuery是否工作良好。好吧,您是否尝试过静态方式检查您的代码样式是否适合这种情况,或者字符串初始化并在setString方法中使用它?我最后的结论是,不可能参数化“FROM”SQL查询的子句。
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();