返回 Bug 清单
BUG-0332project-47中已修复backend-logic
native SQL 与实体映射漂移 —— 改列名/枚举后报表接口集体失效
发现:2026-10-01验证:2026-10-27置信度:90%
症状
管理端报表接口报 SQL 异常:列不存在;或枚举值过滤条件静默匹配不到任何行。
根因
native SQL 绕过 Hibernate 实体映射,schema 演进(改列名、枚举值规范化)不会传播到散落各处的手写 SQL;JPQL 才会被元数据校验兜住。
修复方案
1) 报表/统计能用 JPQL 就用 JPQL,靠类型校验防漂移;
2) 必须用 native SQL 的(窗口函数等),在测试环境建一条『全报表查询冒烟』集成测试,启动/CI 阶段就真实执行每一条,把漂移提前到部署前;
3) 枚举值过滤统一引用枚举类常量,不在 SQL 里写字面量。
检测命令
grep -rn 'nativeQuery = true' --include='*.java' # 逐条核对列名与枚举字面量错误签名
@Query(nativeQuery=true) 引用的列名/枚举值与实体不一致:refund_status→status、approved_at→complete_time、status IN ('DONE') 大小写失配技术信息
来源项目
project-47
涉及文件
AdminReportService.java
标签
native-sql, schema-drift, report, jpa