Mahdi Sadeghi
Mahdi Sadeghi

Reputation: 299

Hibernate Column name Parameter Binding

I am binding Named Parameters in a HQL statement, but it just doesn't get filled.

//colname = "AdminsInfo.name"; assume it is from method's input
//colval = input.getName().toString(); // assume it is from method's input

String query = "from AdminsInfo where :coln = :colv";
Query q = session.createQuery(query);
q.setParameter("coln",colname);
q.setParameter("colv",colval);

System.out.println(q.toString());        

it outputs something like this which means parameters (coln, colv) are not set and returns 0 records.

QueryImpl(from AdminsInfo where :coln = :colv)
Hibernate: select adminsinfo0_.Row as Row1_0_, adminsinfo0_.ID as ID2_0_,adminsinfo0_.Name as Name3_0_, ... where ?=?

Any help on how to bind column names in HQL statements are appreciated. Thanks. Mahdi.

Upvotes: 9

Views: 4798

Answers (2)

Bernardo J. Rios
Bernardo J. Rios

Reputation: 11

Try to replace Query for Criteria.

Criteria c = session.createCriteria(AdminsInfo.class);
c.add(Restrictions.eq(colname,colval));
c.list();

Upvotes: 1

JB Nizet
JB Nizet

Reputation: 692121

You can't bind a column name as a parameter. Only a column value. This name has to be known when the execution plan is computed, before binding parameter values and executing the query. If you really want to have such a dynamic query, use the Criteria API, or some other way of dynamically creating a query.

Upvotes: 12

Related Questions