簡體   English   中英

JPA / Hibernate 4-獲取ScrollableResults

[英]JPA/Hibernate 4 - getting ScrollableResults

我正在使用Hibernate 4.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.list()替換query.scroll()也會產生相同的異常。

QueryImpl類型是原始類型,但是我不知道要在其中放置什么,或者即使那是問題所在。

我的查詢返回一個日期,后跟幾個整數; 它不會直接映射到類。 我只想要一個對象數組-我要處理大量的數據,映射到對象只會讓我慢下來!

多虧了fmodos的一個很好的建議,出現異常是因為我在打電話:

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

通過調用以下方法之一解決此問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM