Java Hibernate-无法在SQLQuery上设置命名参数
我无法使用Hibernate在本机SQL查询上设置参数;代码如下:Java Hibernate-无法在SQLQuery上设置命名参数,java,hibernate,Java,Hibernate,我无法使用Hibernate在本机SQL查询上设置参数;代码如下: Session sess = HibernateUtil.getCurrentSession(); SQLQuery query = sess.createSQLQuery("SELECT * FROM :table WHERE :field = ':value'"); query .addEntity(klass) .setString("table", table) .setString
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();
我收到一个非法argumentexception
;以下是跟踪的顶部:
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)
尝试更改参数编号,第一个参数必须为0,而不是1:
SQLQuery query = sess.createSQLQuery("SELECT * FROM ? WHERE ? = '?'");
query
.addEntity(klass)
.setParameter(0, table)
.setParameter(1, field)
.setParameter(2, value)
.uniqueResult();
我接受了Stanislav的回答,但为了彻底起见,我想记录代码中的一些错误:
记住顺序参数是基于1的!
),位置参数是基于0的。您可以在文档的示例中看到这一点从'my_table'中选择*,其中'my_column'='my_value'代码>
这导致了一个SQL错误。我不得不求助于字符串格式和参数设置的组合
可能重复尝试删除
'
中的'
?“尝试过;新错误:位置超出了已声明顺序参数的数量。请记住,序数参数是基于1的!位置:4
错误日志明确说明参数是基于1的。。。我遗漏了什么?嗯,可能是您必须尝试手动分配索引,比如1、2