Spring hibernate模板列表作为参数 [英] Spring hibernate template list as a parameter

查看:108
本文介绍了Spring hibernate模板列表作为参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图执行这个查询:
代码:

$ p $ this.getHibernateTemplate()
从CustomerInvoice ci+
找到(select distinct ci.customer+
where where ci.id in(?),ids);

以id作为List,id的类型为Long



执行时我得到异常



代码:

  java.lang.ClassCastException:java.util.ArrayList不能转换为java.lang.Long 
在org.hibernate.type.LongType.set(LongType.java:42)
在org.hibernate .type.NullableType.nullSafeSet(NullableType.java:136)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification .java:39)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
在org.hibernate.loader.Loader.doQuery(Loader.java:673)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
在org.hibernate。 loader.Loader.doList(Loader.java:2220)
在org.hibernate.loader.Loader.listI gnoreQueryCache(Loader.java:2104)
在org.hibernate.loader.Loader.list(Loader.java:2099)
在org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
在org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
在org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
在org.springframework.orm .hibernate3.HibernateTemplate $ 29.doInHibernate(HibernateTemplate.java:849)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
at org.springframework.orm.hibernate3。 HibernateTemplate.find(HibernateTemplate.java:840)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:836)
at


解决方案

除了mR_fr0g的回答,这一个也适用:

  this.getHibernateTemplate()
findByNamedParam(从CustomerInvoice中选择不同的ci.customer+
ci+
where ci.id in(:ids),ids,ids);


i'm trying to execute this query : Code:

this.getHibernateTemplate()
      find("select distinct ci.customer " +
             "from CustomerInvoice ci " +
              "where ci.id in (?) " , ids);

with ids as a List, id is of type Long

when executing i get exception

Code:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Long
 at org.hibernate.type.LongType.set(LongType.java:42)
 at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
 at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
 at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:39)
 at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
 at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
 at org.hibernate.loader.Loader.doQuery(Loader.java:673)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
 at org.hibernate.loader.Loader.doList(Loader.java:2220)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
 at org.hibernate.loader.Loader.list(Loader.java:2099)
 at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
 at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
 at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
 at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
 at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:849)
 at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
 at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:840)
 at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:836)
 at

解决方案

In addition to mR_fr0g's answer, this one also works:

this.getHibernateTemplate() 
      findByNamedParam("select distinct ci.customer " + 
             "from CustomerInvoice ci " + 
              "where ci.id in (:ids) ", "ids", ids); 

这篇关于Spring hibernate模板列表作为参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆