详细提示:
The error may exist in com/csair/mysql/daoimpl/mybatis/mappers/ErpApPaymentLineMapper.xml ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: UPDATE erp_ap_payment_line SET deal_flag = 1 and data_file = ? WHERE payment_header_id = ? ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'DEAL_FLAG' cannot be null 10.79.189.76:2882 2026-06-13 16:47:23.569466 YB420A4FBD4C-00063519B3EED275-0-0 ; SQL \[\]; Column 'DEAL_FLAG' cannot be null 10.79.189.76:2882 2026-06-13 16:47:23.569466 YB420A4FBD4C-00063519B3EED275-0-0; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'DEAL_FLAG' cannot be null
问题原因
SQL 语法写错 + 字段非空约束冲突: MySQL 中 UPDATE 多个字段要用逗号 分隔,不是 and,导致 deal_flag 赋值失效、变成 null,而该字段建表时设置了不允许为空 ,所以报错 Column 'DEAL_FLAG' cannot be null。
错误 SQL
sql
UPDATE erp_ap_payment_line
SET deal_flag = 1 and data_file = ?
WHERE payment_header_id = ?
deal_flag = 1 and data_file = ? 会被 MySQL 解析成布尔表达式 ,不是两个字段赋值,最终 deal_flag 无有效值。
修正 SQL(Mybatis XML 里改)
把 and 换成 英文逗号:
sql
UPDATE erp_ap_payment_line
SET deal_flag = 1, data_file = #{dataFile}
WHERE payment_header_id = #{paymentHeaderId}
补充排查点
- 确认
data_file入参不能为 null,否则依旧报非空错误; - 核对
payment_header_id传值正常,避免更新全表; - 改完 Mapper XML 后,本地如果开了跳过编译 / 离线运行,建议重新编译一次再启动,确保 XML 文件生效。
总结: 清晰记到脑中,mysql中更新多个字段,用逗号(,)分割而不是and