首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Hibernate 讀取數據超出 int 範圍異常:Long/BigInteger 映射解決方案

     編輯:程式設計綜合問答

異常訊息

'1.50301132741E11' in column '7' is outside valid range for the datatype INTEGER

原因分析

  • 資料庫欄位為 BIGINT/NUMERIC(18),值約 1.5×10^11 (1500 億),遠超 int 上限 2,147,483,647 (約 2.1×10^9)。
  • Hibernate 實體類該欄位映射為 Integer/int,自動調用 ResultSet.getInt() 導致溢位。

Java 基本類型範圍回顧

解決方案

  1. 實體類改用 Long (推薦):
    
    @Column(name = "big_column")
    private Long bigValue; // 或 long (非空)
    
  2. 若超過 Long 範圍 (極罕見),用 BigInteger + @Type(type="org.hibernate.type.BigIntegerType")。
  3. HQL/JPQL 查詢投影 時同步修改 DTO 字段型別。
  4. 資料庫遷移腳本**同步修改**:確保實體與表結構一致。

驗證

重啟應用,觀察日誌 SELECT ... big_column ... 對應實體 Long 正常賦值,無溢位異常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型位數範圍
byte8-128 ~ 127
short16-32,768 ~ 32,767
int32-2,147,483,648 ~ 2,147,483,647
long64-9.22×10^18 ~ 9.22×10^18