Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate中使用参数创建SQLQuery_Java_Hibernate - Fatal编程技术网

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();