2013-04-24 51 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);