使用Projections.rowCount()的Hibernate条件查询会导致数字溢出

时间:2011-05-11 20:56:52

标签: java oracle hibernate jdbc

我正在使用Oracle 11g R2。我有一个包含91亿行的表。当我尝试使用Projections.rowCount().list()运行包含.uniqueResult()(我需要执行以获取表中的行数)的条件查询时,我得到一个数字溢出异常。

堆栈跟踪的相关部分:

java.sql.SQLException: Numeric Overflow
  oracle.jdbc.driver.NumberCommonAcessor?throwOverFlow
  oracle.jdbc.driver.NumberCommonAcessor?getInt
  oracle.jdbc.driver.OracleResultSetImpl?getInt
  oracle.jdbc.driver.OracleResultSet?getInt
  org.hibernate.type.IntegerType?get  <---------------- oops.
  org.hibernate.type.NullableType?nullSafeGet
  org.hibernate.type.NullableType?nullSafeGet
  org.hibernate.loader.criteria.CriteriaLoader?getResultColumnOrRow
  org.hibernate.loader.Loader.getRowFromResultSet
  org.hibernate.loader.Loader.doQuery
  org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections
  org.hibernate.loader.Loader.doList
  org.hibernate.loader.Loader.listIgnoreQueryCache
  org.hibernate.loader.Loader.list
  org.hibernate.loader.criteria.CriteriaLoader?list
  org.hibernate.impl.SessionImpl?.list
  org.hibernate.impl.CriteriaImpl?.list
  mypackage.myclass.GetRowCount

无论表大小如何,Hibernate都决定使用Integer来存储结果。如何覆盖此行为?

1 个答案:

答案 0 :(得分:0)

使用SQLProjection使用足够大的返回Type来获得结果。