1
私はOracle 11g R2を使用しています。私は91億行のテーブルを持っています。 .list()
または.uniqueResult()
のいずれかを使用してProjections.rowCount()
(テーブルの行数を取得する必要がある)を含む条件クエリを実行しようとすると、数値オーバーフロー例外が発生します。Projections.rowCount()を使用しているHibernate criteriaクエリは、数値オーバーフローを引き起こします。
スタックトレースの関連部分:
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は関係なく、テーブルサイズの結果を格納するのに整数を使用するように決定されます。この動作をどのように無効にすることができますか?
これは修正されているようです。 'criteria.setProjection(Projections.rowCount())'を使用する代わりに、criteria.setProjection(新しいSQLProjection( "count(*)としてROWCOUNT"、新しいString [] {"ROWCOUNT"}、新しいType [] {new LongType()}) ' – gdm