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
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}
补充排查点
- 确认
data_file入参不能为 null,否则依旧报非空错误; - 核对
payment_header_id传值正常,避免更新全表; - 改完 Mapper XML 后,本地如果开了跳过编译 / 离线运行,建议重新编译一次再启动,确保 XML 文件生效。
总结: 清晰记到脑中,mysql中更新多个字段,用逗号(,)分割而不是and
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)