【发布时间】:2016-01-04 20:32:46
【问题描述】:
我无法在使用 Hibernate 的本机 SQL 查询上设置参数;这是代码:
Session sess = HibernateUtil.getCurrentSession();
SQLQuery query = sess.createSQLQuery("SELECT * FROM :table WHERE :field = ':value'");
query
.addEntity(klass)
.setString("table", table)
.setString("field", field)
.setString("value", value)
.uniqueResult();
我收到了IllegalArgumentException;这是跟踪的顶部:
java.lang.IllegalArgumentException: Parameter value does not exist as a named parameter in [SELECT * FROM :table WHERE :field = ':value']
at org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:409)
at org.hibernate.internal.AbstractQueryImpl.setString(AbstractQueryImpl.java:696)
编辑:
尝试使用位置参数,还是报错:
SQLQuery query = sess.createSQLQuery("SELECT * FROM ? WHERE ? = '?'");
query
.addEntity(klass)
.setParameter(1, table)
.setParameter(2, field)
.setParameter(3, value)
.uniqueResult();
错误:
org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 3
at org.hibernate.engine.query.spi.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:80)
at org.hibernate.engine.query.spi.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:86)
【问题讨论】:
-
尝试删除
'中的'?' -
试过了;新错误:
Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 4