Hibernate异常查询未正确结束

时间:2015-02-24 11:54:35

标签: java oracle hibernate

运行此查询时获取异常

select COUNT(tl.LOG_ID)AS EVTCOUNT,tl.PRIORITY FROM Customer_? tl Where tl.DEVICE_REPORTED_TIME >= SysDate-90 GROUP BY tl.PRIORITY ORDER BY tl.PRIORITY`

我在这里使用query.setLong(0,custId);

所以它会变得像Customer_1

如果我从SqlDeveloper IDE运行上述查询它工作正常或者如果我将此值设置为静态像Customer_1而不是Customer_? 它工作正常。

错误:

  

警告:org.hibernate.util.JDBCExceptionReporter - SQL错误:933,SQLState:42000   错误:org.hibernate.util.JDBCExceptionReporter - ORA-00933:SQL命令未正确结束

虽然其他查询运行正常,但这个查询可能有什么问题?

修改

我使用的是NamedQueries,我已将此查询写入单独的xml文件中。

1 个答案:

答案 0 :(得分:3)

您不能在这样的查询中使用参数。如果不进入这背后的逻辑,最好的选择是在创建查询之前连接查询字符串

String queryString = "select COUNT(tl.LOG_ID) AS EVTCOUNT,tl.PRIORITY FROM Customer_" + custId + " tl Where tl.DEVICE_REPORTED_TIME >= SysDate-90 GROUP BY tl.PRIORITY ORDER BY tl.PRIORITY";
Query query = session.createSQLQuery(queryString);

修改

对于NamedQueries,它们是在应用程序启动时编译的,所以我认为没有办法在运行时更改目标实体(表)。