表新增非空基本類型字段 (如 double),歷史數據該字段為 NULL,Hibernate 映射基本類型無法接收 null,讀取時報錯。
| 方案 | 操作 | 優點 | 缺點 |
|---|---|---|---|
| 1. 數據庫更新默認值 | UPDATE table SET new_col = 0 WHERE new_col IS NULL; 修改列定義 ALTER TABLE ... MODIFY new_col DOUBLE NOT NULL DEFAULT 0; | 徹底解決,數據一致,代碼無需改動 | 需停機/維護窗口,大表執行慢 |
| 2. 實體字段改為包裝類型 | private Double field; (而非 double) | 代碼層面兼容 null,無需改數據 | 業務邏輯需處理 null 判斷,語義變化 |
| 3. @ColumnDefault / @DynamicInsert | @ColumnDefault("0") 或 @DynamicInsert (僅插入時生效) | 聲明式 | 不影響已有 null 數據讀取 |
Double,配合 @ColumnDefault,待數據清洗完成後改回基本類型。hbm2ddl.auto=update 不會自動處理歷史數據默認值。