名前付きパラメータを使用して文字列をクエリに挿入しようとしています。私は春とhibernateTemplateを使用しています。そして、私はかなり休止状態になっています。過去には無名の名前付きパラメータを使用していましたが、両者が隣り合っているときにエラーが発生したようです。私は以下の私の問題に類似のサンプルコードを作っています(手元の問題を強調するために簡略化されています)。 orderByにはフィールドの文字列が含まれ、orderDirectionにはASCまたはDESCが含まれます。Hibernateでの連続する名前付きパラメータの問題(Spring HibernateTemplate)
public List<HashMap<String, Object>> exampleList(String orderBy, String orderDirection) {
logger.debug(orderBy);
logger.debug(orderDirection);
final String queryString = "SELECT new map("+
"a.id AS id, "+
"a.name AS name, "+
"a.number AS number) "+
"FROM Asset a "+
"ORDER BY :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;
}
コンソールには、私のパラメータデバッグ:
DEBUG: com.myOrg.myProject.asset.AssetDAO - a.id
DEBUG: com.myOrg.myProject.asset.AssetDAO - desc
をそして私は、私は、クエリ文字列に値を直接置くことでそれをテストしてきたように、このクエリは、自分自身で問題なく動作します知っています。私はこれが悪い習慣であることを知っています。なぜ私はそれをやっていないのですか?
次のように私が手にエラーが(スタックトレースは、読みやすくするために短縮しますが、これが唯一のエラーであると私は要求に応じて、完全なスタックトレースを提供することができている)である。
再びSEVERE: Servlet.service() for servlet dmat3 threw exception
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: : near line 1, column 118 [SELECT new map(a.id AS id, a.name AS name, a.number AS number) FROM com.gsipt.dmat3.asset.Asset a ORDER BY :orderBy :orderDirection]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:31)
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:24)
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:258)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:914)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:1)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912)
at com.myOrg.myProject.asset.AssetDAO.exampleList(AssetDAO.java:142)
at com.myOrg.myProject.navigator.NavigatorController.assetGrid(NavigatorController.java:163)
、これは単に作品別々のパラメータがある場合は問題ありませんが、それらが一緒に配置されると、これが発生します。名前のないパラメータを使用して同じエラーを再現することができます。 "予期しないトークン"が2番目の "?"クエリ文字列にORDER BY文で意味をなさないように、名前付きまたは名前なしの2つのパラメータを互いに隣り合わせに配置するにはどうすればよいですか。
おかげで、
わかりましたが、残念ながらそれを修正しません。実際には、私は何かをデバッグしようとしていたので、私がfindByNamedParamを使用して同じエラーが発生したので、私が 'find'で貼り付けたバージョンは間違いでした。私はあなたのご褒美にちょうど今試してみても、同じエラーがありました。 –
hvgotcodes:SessionFactory.getCurrentSessionに基づくDAOの例はありますか? –