2995840376
|
0ff9103089
|
fix(H): 修复 product_property 驼峰遗留列导致后台产品页面 500
问题:后台「产品中心 - 产品列表/详情/物模型」报
Unknown column 'completion_mode' in 'field list'(BadSqlGrammarException)
根因:V19(面板 P2 迁移)建列时把 completionMode 直接当作列名写入 product_property(驼峰),
而 MyBatis-Plus 默认把实体字段 completionMode 映射为下划线形式 completion_mode,
实体查询/写入时找不到列。
注:V22 已把 completion_mode 的权威归属判定为 product_action 维度,
product_property 上的同名列属于历史兼容,保留但统一为下划线命名。
修复:新增 V23 迁移,将 product_property.completionMode 重命名为 completion_mode
- 幂等可重复执行,三种情形分别处理:
1) 仅有驼峰列 -> 直接 RENAME COLUMN
2) 两列都存在 -> 先回填旧列非空值到新列,再 DROP 旧列
3) 仅有下划线列 -> 跳过
- 无存储过程、无 DELIMITER(MySQL batch 管道模式下 DELIMITER 失效)
- 全库扫描(COLUMN_NAME <> LOWER(COLUMN_NAME))确认驼峰遗留列仅此一处
上线过程:全库备份 /opt/iotsaas/backup/iot_platform_before_v23.sql
-> 克隆库 iot_v23_test 演练两遍(重命名成功 + 幂等无副作用)-> 生产执行 -> 克隆库 DROP
验证:/api/v1/products、/api/v1/products/{id}、/api/v1/products/{id}/spec、
/api/v1/products/{id}/control-schema 全部返回 200,物模型属性正常返回。
|
2026-10-27 19:12:13 +08:00 |
|