I am unable to set parameters on a native SQL query using Hibernate; here is the code:
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();
I am receiving an IllegalArgumentException
; here is the top of the trace:
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)
EDIT:
Trying to use positional parameters, I still get an error:
SQLQuery query = sess.createSQLQuery("SELECT * FROM ? WHERE ? = '?'");
query
.addEntity(klass)
.setParameter(1, table)
.setParameter(2, field)
.setParameter(3, value)
.uniqueResult();
Error:
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)