動作
Bug #1344
已結束[Branch] hibernate_sequence 缺 e_connector_priority 註冊,導致 ConnectorPriority INSERT 拋 SQL Error (patch 流程防呆)
開始日期:
2026-06-18
完成日期:
預估工時:
概述
問題描述¶
EMS branch 部署時,hibernate_sequence table 漏註冊 e_connector_priority 序列。當任何業務流程嘗試 INSERT 新的 ConnectorPriority 記錄時,Hibernate 透過 IdGeneratorUtil.nextIdFromSequence() 查不到對應 sequence,會拋出 Sequence not found: e_connector_priority 錯誤,導致整個 transaction rollback。
影響範圍¶
-
影響案場:
- a17 (寶台 A17)
- ct1 (寶台 A17) - 同一個案場的不同站台,缺同一個 sequence
-
影響功能:所有需要 INSERT
e_connector_priority的流程- 充電樁進入 PREPARING/CHARGING 狀態時,自動建立 ConnectorPriority 記錄 (ChargingOrchestrator.upsertQueueForStatusNotification)
- 離峰充電手動入列 (ChargeRotationAdminController)
-
錯誤訊息:
WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: null ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Sequence not found: e_connector_priority - 連帶影響:因為 transaction rollback,旋轉模式 reset queue 失敗 → 觸發後續 ENQUEUED 卡住、無法充電
復現¶
- 部署新版本的 ems_branch(包含 e_connector_priority table)
- 任一充電樁進入 CHARGING/PREPARING 狀態 → 觸發
upsertQueueForStatusNotification - 觀察 log 出現:
Sequence not found: e_connector_priority -
e_connectors狀態無法從 ENQUEUED 推進
實際案例 (a17 log, 2026-06-18)¶
00:00:00 WARN hibernate_sequence table 沒有這個 sequence_name:e_connector_priority
07:30:00 WARN hibernate_sequence table 沒有這個 sequence_name:e_connector_priority
07:39:30 WARN hibernate_sequence table 沒有這個 sequence_name:e_connector_priority
13:53:27 ERROR Sequence not found: e_connector_priority ← 第一個 ERROR (華城充電樁觸發)
14:00:50 ERROR Sequence not found: e_connector_priority ← (華城充電樁觸發)
14:32:40 ERROR Sequence not found: e_connector_priority ← (CloudLink CP003-008 觸發)
DB 現況驗證¶
SELECT * FROM hibernate_sequence WHERE sequence_name LIKE 'e_%';
-- 結果:只有 e_user_building (next_val=17),沒有 e_connector_priority
根本原因¶
patch_20251231.sql 只建了 e_connector_priority table,但忘了 INSERT 對應的 sequence 記錄。SS3A 框架的 IdGeneratorUtil.nextIdFromSequence() 透過 hibernate_sequence table 管理所有 entity 的 ID,需要手動註冊每個 table 的 sequence。
修法方向(待 Ken 確認)¶
方案 A(推薦):補登 sequence + patch 流程防呆¶
-
立即補登:
INSERT IGNORE INTO hibernate_sequence (sequence_name, next_val) VALUES ('e_connector_priority', 1); - patch 流程防呆:未來新增 entity table 時,patch SQL 必須同步 INSERT sequence 記錄
- deploy checklist:deploy 腳本檢查所有 entity table 都有對應 sequence
方案 B:徹底改用 AUTO_INCREMENT¶
- 把
e_connector_priority.id改為BIGINT AUTO_INCREMENT,移除@PrefixDateSequence - 同步檢查其他 entity 是否有同樣漏註冊風險
- 影響範圍較大,需全面測試
方案 C:framework 端 startup check¶
- SS3A 啟動時掃描所有
@Entity,比對hibernate_sequence是否都有對應記錄 - 缺漏時 warn log + 自動 INSERT(需 framework 共識)
建議採用:A 立即補登 + C 開案追 framework 防呆¶
暫時補救 SQL¶
-- 補登 e_connector_priority sequence
INSERT IGNORE INTO hibernate_sequence (sequence_name, next_val)
VALUES ('e_connector_priority', 1);
參考資訊¶
- 受影響案場:a17 / ct1
- 受影響 entity:
com.sylksoft.ems.branch.model.ConnectorPriority - 受影響 table:
e_connector_priority - 呼叫路徑:
ChargingOrchestrator.upsertQueueForStatusNotification()→connectorPriorityRepository.save()→IdGeneratorUtil.nextIdFromSequence("e_connector_priority") - 相關 commit:build e_connector_priority table 的 patch_20251231.sql
- Branch:private
動作