环境

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重复了居然没事

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐