-
fix: 让可清空字段的 null 真正写进 UPDATE 语句 · d8736010
MyBatis-Plus 的 updateById 默认用 FieldStrategy.NOT_NULL,实体里值为 null 的 字段会被整个从 SET 子句里剔除。表现极具欺骗性:接口返回成功、update_time 也 更新了,唯独那一列的旧值原封不动,刷新后又冒出来。 已确认受影响的操作: - 设备资产「移除图片」保存后列表仍显示旧图 - 设备资产、手机号码管理「清空使用人 / 运营商 / ICCID / 实名人 / 管理模式 / 关联设备」保存后均不生效 给这些业务上允许清空的字段声明 updateStrategy = ALWAYS。企微、微信、抖音的 device_id 目前还没有编辑接口,一并声明是提前立规矩,避免补编辑功能时重蹈覆辙。 没有改全局 update-strategy 配置:那会让所有模块的 update 都把 null 写进库, 可能在别处造成数据丢失。放开 ALWAYS 的前提是所有 updateById 调用点都走 「先查全量实体再改字段」,已逐个核对确认。 新增 NullableColumnUpdateTest 直接检查 MyBatis-Plus 生成的 SET 子句,而不是 mock 掉 Mapper——原来的 Service 测试正是因为 mock 了 Mapper、SQL 从未被验证, 才让这个缺陷漏了出去。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DaiJiezhang authored
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| java/com/xyw/console | Loading commit data... | |
| resources/db/migration | Loading commit data... |