mybatis plus 达梦数据库 重复的列名

在将数据库从MySQL迁移到达梦数据库后,使用MyBatisPlus的update方法执行更新操作时遇到错误,提示SQL语句中存在重复列名。问题源于在update接口中同时传入了实体对象和UpdateWrapper,导致字段设置重复。解决方案是确保只传入一个实体对象或UpdateWrapper,避免字段值重复设置。调整后,通过传入null和UpdateWrapper解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

mybatis plus 3.5.9
达梦数据库 8.0

问题

从mysql迁移到达梦数据库后,执行update时,提示

Caused by: java.sql.SQLException: 第XX行附近出现错误:
重复的列名[XXXX]

打印出SQL如下:

UPDATE g_health_check_runtime 
SET 
health_check_id =?,
last_check_time =?,
last_check_result =?,
last_check_result_code =?,
last_check_result_content =?,
next_check_time =?,
binding_num =?,
creator_type =?,
update_id =?,
create_time =?,
update_time =?,


health_check_id =?,
last_check_time =?,
last_check_result =?,
last_check_result_code =?,
last_check_result_content =?,
next_check_time =?,
binding_num =?,
creator_type =? 
WHERE
	is_del = 0  AND ( id = ?)

根据sql语句,发现update的SQL中,set中有重复的字段。

这个语句是mybati plus生成的,可问题是mybatis plus会生成两次呢?

解决方案

通过断点排查,发现是因为 我直接调用了BaseMapper中的 update接口
update接口 传两个参数,一个为实体对象,一个为UpdateWrapper
我这边set了实体对象的值,并且也在updateWrapper中同样设置了值,导致两者在一起重复了。
根据 下方的参考 默认传一个实体对象或者UpdateWrapper,另一个为null即可。
我这边是因为要强制更新 字段的值为null,所以用了UpdateWrapper
最终修改为了

update(null, updateWrapper)

参考

通过文档:https://baomidou.com/pages/49cc81/#update-3
在这里插入图片描述
根据文档的值,同时设置的实体对象和UpdateWrapper,会重复设置同一个字段。

吐槽

mysql重复了居然没事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值