專案

一般

配置概況

動作

Bug #1344

已結束

[Branch] hibernate_sequence 缺 e_connector_priority 註冊,導致 ConnectorPriority INSERT 拋 SQL Error (patch 流程防呆)

是由 陳國瑋約 2 個月 前加入. 於 21 天 前更新.

狀態:
Closed
優先權:
Normal
被分派者:
開始日期:
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 卡住、無法充電

復現

  1. 部署新版本的 ems_branch(包含 e_connector_priority table)
  2. 任一充電樁進入 CHARGING/PREPARING 狀態 → 觸發 upsertQueueForStatusNotification
  3. 觀察 log 出現:
    Sequence not found: e_connector_priority
    
  4. 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 流程防呆

  1. 立即補登
    INSERT IGNORE INTO hibernate_sequence (sequence_name, next_val)
    VALUES ('e_connector_priority', 1);
    
  2. patch 流程防呆:未來新增 entity table 時,patch SQL 必須同步 INSERT sequence 記錄
  3. 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

是由 陳國瑋約 2 個月 前更新

  • 狀態New 變更為 Resolved

是由 陳國瑋約 2 個月 前更新

2026-06-19 00:06 重大更新 — 由 SS3A framework 治本

sylksoft/sylksoft-framework 6.9.5-SNAPSHOT build 45 已 deploy,徹底解決本 ticket。

Framework 改動

PrefixDateSequenceIdGenerator.java 在 build 45 完全重寫:

  • 移除所有 IdGeneratorUtil.nextIdFromSequence()currentIdFromSequence() 呼叫
  • 移除 import IdGenerateException
  • 新邏輯:JVM 內部 ConcurrentHashMap counter + DB max(id)
  • 完全不需要 hibernate_sequence table

對本 ticket 的影響

原 ticket 描述 現在
hibernate_sequencee_connector_priority 註冊 → SQL error 問題不存在,framework 不再讀 hibernate_sequence
修法 A:補 INSERT INTO hibernate_sequence 不需要
修法 B:改 e_connector_priority AUTO_INCREMENT 不需要(framework 已治本)
修法 C:framework startup check 不需要(build 45 已經不用 sequence)
patch 流程防呆 不需要(不會再缺 sequence)

跟其他 entity 的關係

其他 4 個 entity (s_user, e_id_tag, e_tariff_table, e_bill_invoice_status) 同樣受 framework 治本影響 — 也不需要補 sequence 註冊

Ticket 狀態

  • Status: New → Resolved (framework 已治本,無後續工作)
  • #1343 的關係:本 ticket 跟 #1343 獨立的兩個 bug,#1343 仍需繼續處理 Fortune 充電樁自動送電問題

是由 陳國瑋21 天 前更新

  • 狀態Resolved 變更為 Closed

2026-07-13 A17 實機部署查核:目前 ems-branch-api 正在執行的 jar 已包含 ss3a-kernel 6.9.5-SNAPSHOT 新版 PrefixDateSequenceIdGenerator;bytecode 顯示取號已改為 DB max(id) + JVM counter,不再依賴 hibernate_sequence 的 nextIdFromSequence/currentIdFromSequence。#1344 的 e_connector_priority sequence 缺漏風險已由 framework 修正消除,故關閉。

是由 陳國瑋21 天 前更新

補齊關閉狀態的完成度:#1344 已由 framework 修正並於 A17 實機部署查核確認,done ratio 設為 100%。

動作

匯出至 Atom PDF