java - Consecutive named parameter problems in Hibernate (Spring HibernateTemplate) -


i trying use named parameters inject strings query. using spring , hibernatetemplate, , and new hibernate. have gotten unnamed , named parameters work in past, seems though when right next each other throw error. have made similar example code problem below (simplified highlight problem @ hand). orderby contains string of field , orderdirection contains asc or desc.

public list<hashmap<string, object>> examplelist(string orderby, string orderdirection) {     logger.debug(orderby);     logger.debug(orderdirection);      final string querystring =  "select new map("+                                 "a.id id, "+                                 "a.name name, "+                                 "a.number number ) "+                                 "from asset "+                                 "order :orderby :orderdirection";      string[] parameternames = {"orderby", "orderdirection"};     object[] parametervalues = {orderby, orderdirection};      list<hashmap<string, object>> results = (list<hashmap<string, object>>) hibernatetemplate.find(querystring, parameternames, parametervalues);      return results; } 

the console debugs parameters:

debug: com.myorg.myproject.asset.assetdao - a.id debug: com.myorg.myproject.asset.assetdao - desc 

and know query run fine on own, have tested putting values directly query string. know bad practice , can expose me injection why not doing that.

the error follows (stack trace shortened ease of reading, error , can provide full stack trace upon request):

severe: servlet.service() servlet dmat3 threw exception org.hibernate.hql.ast.querysyntaxexception: unexpected token: : near line 1, column 118 [select new map(a.id id, a.name name, a.number number ) com.gsipt.dmat3.asset.asset order :orderby :orderdirection]     @ org.hibernate.hql.ast.querysyntaxexception.convert(querysyntaxexception.java:31)     @ org.hibernate.hql.ast.querysyntaxexception.convert(querysyntaxexception.java:24)     @ org.hibernate.hql.ast.errorcounter.throwqueryexception(errorcounter.java:59)     @ org.hibernate.hql.ast.querytranslatorimpl.parse(querytranslatorimpl.java:258)     @ org.hibernate.hql.ast.querytranslatorimpl.docompile(querytranslatorimpl.java:157)     @ org.hibernate.hql.ast.querytranslatorimpl.compile(querytranslatorimpl.java:111)     @ org.hibernate.engine.query.hqlqueryplan.<init>(hqlqueryplan.java:77)     @ org.hibernate.engine.query.hqlqueryplan.<init>(hqlqueryplan.java:56)     @ org.hibernate.engine.query.queryplancache.gethqlqueryplan(queryplancache.java:72)     @ org.hibernate.impl.abstractsessionimpl.gethqlqueryplan(abstractsessionimpl.java:133)     @ org.hibernate.impl.abstractsessionimpl.createquery(abstractsessionimpl.java:112)     @ org.hibernate.impl.sessionimpl.createquery(sessionimpl.java:1623)     @ org.springframework.orm.hibernate3.hibernatetemplate$30.doinhibernate(hibernatetemplate.java:914)     @ org.springframework.orm.hibernate3.hibernatetemplate$30.doinhibernate(hibernatetemplate.java:1)     @ org.springframework.orm.hibernate3.hibernatetemplate.doexecute(hibernatetemplate.java:406)     @ org.springframework.orm.hibernate3.hibernatetemplate.executewithnativesession(hibernatetemplate.java:374)     @ org.springframework.orm.hibernate3.hibernatetemplate.find(hibernatetemplate.java:912)     @ com.myorg.myproject.asset.assetdao.examplelist(assetdao.java:142)     @ com.myorg.myproject.navigator.navigatorcontroller.assetgrid(navigatorcontroller.java:163) 

again, works fine when there separate parameters, when placed happens. same error can recreated using unnamed parameters "unexpected token" second "?" in query string. how put 2 parameters, named or unnamed, next each other make sense in order statement.

thanks, -cliff

you using find, not

findbynamedparams

see here. spring 3 api, see here.

also note hibernatetemplate documentation says

note: of hibernate 3.0.1, transactional hibernate access code can coded in plain hibernate style. hence, newly started projects, consider adopting standard hibernate3 style of coding data access objects instead, based on sessionfactory.getcurrentsession().


Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -