2013-04-24 50 views
0

我使用Hibernate 4.2作为我的JPA提供程序。 我想使用ScrollableResults对象来处理我的结果集。JPA /休眠4 - 获得ScrollableResults

我的代码看起来是这样的,基本上是:

javax.persistence.Query q = em.createQuery(...); 
org.hibernate.Query query = ((org.hibernate.ejb.QueryImpl)q).getHibernateQuery(); 
query.setParameter(blah blah); 
ScrollableResults sr = query.scroll(ScrollMode.FORWARD_ONLY); 

这总是会抛出一个异常:

Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Integer 
    at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:36) 
    at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:57) 
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:92) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275) 
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:66) 
    at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:608) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1870) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1831) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:899) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) 
    at org.hibernate.loader.Loader.doList(Loader.java:2516) 
    at org.hibernate.loader.Loader.doList(Loader.java:2502) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332) 
    at org.hibernate.loader.Loader.list(Loader.java:2327) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1268) 
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) 
    at com.example.server.ChartGenerator.getChart() 

作为一个实验,用替换query.list Query.scroll()方法()也产生同样的例外。

QueryImpl类型是一种原始类型,但我无法弄清楚应该在那里放置什么,或者甚至是什么问题。

我的查询返回一个日期后跟几个整数;它不直接映射到一个类。我只想要一个对象数组 - 我有大量的数据要处理,映射到对象只会减慢我的速度!

+0

哎呀,我的上市例外是为query.list()测试,而不是query.scroll()。不过,同样的结果。 – Jamie 2013-04-24 14:33:22

+0

另一个更新:调用query.getReturnTypes()为我的查询返回正确的类型。 – Jamie 2013-04-24 14:43:27

+0

什么是查询,什么是相关实体及其映射? – 2013-04-24 14:46:17

回答

0

感谢来自fmodos一个很好的提示,异常被引起的,因为我打电话:

org.hibernate.Query.setParameter("groupids", list); 

问题是通过调用下面的一个解决:

org.hibernate.Query.setParameterList("groupids", list); 
javax.persistence.Query.setParameter("groupids", list);