Java JPA/Hibernate4-获取可滚动的结果

Java JPA/Hibernate4-获取可滚动的结果,java,hibernate,jpa,Java,Hibernate,Jpa,我使用Hibernate4.2作为我的JPA提供程序。 我想使用ScrollableResults对象来处理我的结果集 我的代码基本上如下所示: javax.persistence.Query q = em.createQuery(...); org.hibernate.Query query = ((org.hibernate.ejb.QueryImpl)q).getHibernateQuery(); query.setParameter(blah blah); ScrollableResul

我使用Hibernate4.2作为我的JPA提供程序。 我想使用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.scroll()替换为query.list()也会产生相同的异常

QueryImpl类型是一种原始类型,但我不知道应该在其中添加什么,或者这是否就是问题所在


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

多亏了fmodos的一个好提示,出现了异常,因为我打电话:

org.hibernate.Query.setParameter("groupids", list);
通过调用以下命令之一可解决此问题:

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

哦,我列出的例外是query.list()测试,而不是query.scroll()。但结果相同。另一个更新:调用query.getReturnTypes()返回查询的正确类型。查询是什么,相关实体及其映射是什么?您正在设置的参数是什么?绑定参数时会发生异常查询是:从Metrics行WHERE{子句}中选择row.date、row.delay、row.jitter。当我使用JPA的query.getResultList()时,此查询成功运行。