2011-05-11 7 views
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は関係なく、テーブルサイズの結果を格納するのに整数を使用するように決定されます。この動作をどのように無効にすることができますか?

答えて

0

SQLProjectionを使用すると、戻り値はTypeで十分です。

+0

これは修正されているようです。 'criteria.setProjection(Projections.rowCount())'を使用する代わりに、criteria.setProjection(新しいSQLProjection( "count(*)としてROWCOUNT"、新しいString [] {"ROWCOUNT"}、新しいType [] {new LongType()}) ' – gdm

関連する問題