mybatisplus对应实体去掉了@TableId,项目还是使用的自己策略 生成的id,而不是数据库自增id,该如何解决

首先简单描述一下为什么要这么做
需要做一个抢购秒杀的活动,抢购及时展示数据,后台通过中间件去大量的接收插入数据,压测时发现总有几条数据插入失败,通过后台日志发现是高并发时插入数据时id主键冲突了,于是按了如下几种方法去解决:
解决方案
1,将插入接口try/catch,冲突了以后重新插入,还是不行,高并发还是会主键冲突
2,去掉了项目中mybatisplus中实体的注解。去掉是因为用数据库自增主键是可以解决高并发下数据插入的问题,然后去掉了实体的注解@Table(type=IdType.ID_WORKER_STR),发现还是会主键冲突。后来经过发现项目中的配置文件配置了全局的id生成策略是:id_worker-str,也就是说即使你去掉了 也还是会采用自动生成的id,而不是数据库的自增id。
3,后来根据MyBatis Plus的官方文档,全局配置中的idType和实体中注解的idType的优先级是不同的。

在MyBatis Plus中,全局配置的idType是通过GlobalConfig类的setIdType方法设置的。这个设置会应用于所有的实体类,除非在实体类中使用了@TableId注解来覆盖全局配置。

实体中注解的idType是通过@TableId注解的type属性设置的。如果在实体类中使用了@TableId注解,并且设置了type属性,那么这个设置会覆盖全局配置中的idType。

所以,实体中注解的idType的优先级更高,会覆盖全局配置中的idType设置。然后将实体上面的注解设置成@Table(type=IdType.INPUT)问题解决,打印的sql 显示id为null,数据库插入的数据id是按MySQL自增的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值