MySQLIntegrityConstraintViolationException: Column ‘DEAL_FLAG‘ cannot be null

详细提示:

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}

补充排查点

  1. 确认 data_file 入参不能为 null,否则依旧报非空错误;
  2. 核对 payment_header_id 传值正常,避免更新全表;
  3. 改完 Mapper XML 后,本地如果开了跳过编译 / 离线运行,建议重新编译一次再启动,确保 XML 文件生效。

总结: 清晰记到脑中,mysql中更新多个字段,用逗号(,)分割而不是and