详细提示:

### 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

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 换成 英文逗号

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐