执行抓取HQL查询时发生异常。该查询大部分时间都有效,但有时会显示此异常
数据库是MySQL,使用的服务器是JBoss 5.1.0 GA
显示的错误是:
org.hibernate.exception.GenericJDBCException:无法执行查询 在org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) 在org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) 在org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 在org.hibernate.loader.Loader.doList(Loader.java:2231) 在org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) 在org.hibernate.loader.Loader.list(Loader.java:2120) 在org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401) 在org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361) 在org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) 在org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148) 在org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) 在java.lang.Thread.run(Thread.java:745)导致原因:org.jboss.util.NestedSQLException:Error; -嵌套可抛出: (java.lang.OutOfMemoryError:超出了GC开销限制) 在org.jboss.resource.adapter.jdbc.WrappedConnection.checkException(WrappedConnection.java:873) 在org.jboss.resource.adapter.jdbc.WrappedStatement.checkException(WrappedStatement.java:852) 在org.jboss.resource.adapter.jdbc.WrappedResultSet.checkException(WrappedResultSet.java:1947) 在org.jboss.resource.adapter.jdbc.WrappedResultSet.getString(WrappedResultSet.java:892) 在org.hibernate.type.StringType.get(StringType.java:41) 在org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184) 在org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173) 在org.hibernate.type.AbstractType.hydrate(AbstractType.java:105) 在org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2124) 在org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1404) 在org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332) 在org.hibernate.loader.Loader.getRow(Loader.java:1230) 在org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603) 在org.hibernate.loader.Loader.doQuery(Loader.java:724) 在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) 在org.hibernate.loader.Loader.doList(Loader.java:2228) ... 11更多原因:java.lang.OutOfMemoryError:超出了GC开销限制
答案 0 :(得分:0)
您的应用程序似乎内存不足。查询可能会返回非常大的数据集,因此分配给应用程序的内存不足以处理该数据集。 您可以,
答案 1 :(得分:0)
基于您的堆栈跟踪,查询已在数据库中成功执行,并且在JVM中准备结果集时发生错误。 此异常是与内存相关的问题,当您的程序需要的内存超过可用内存时,就会发生此问题。
有些可能性是
配置:您的堆配置(Xmx)太小,无法满足您的需要,应该对其进行扩展。
错误:您的查询中存在一个错误,该错误会生成比预期更大的结果集。
设计:您需要重新设计代码,以便在不超出可用内存的情况下加载此数据。您可以进行分页并在每次迭代中存储一小部分数据。在这种情况下,在加载下一页之前,将每一页刷新给最终用户或消费者很重要。