MybatisPlus使用@TableId(value = “id“, type = IdType.AUTO)注解使主键id自增长无效的问题

当使用MybatisPlus的@TableId注解后,主键ID自增长功能仍无效。问题可能源于首次插入时未设置@TableId,导致ID值过大。解决方案是删除并重建表以重置自动递增字段。尝试修改该字段或使用SQL语句未能成功,因为字段只能递增,不能减小。
摘要由CSDN通过智能技术生成

项目场景:

关于MybatisPlus使用@TableId(value = “id“, type = IdType.AUTO)注解使主键id自增长无效的问题


问题描述

设置@TableId注解后,还是无法做到数据库的主键自增长。

原因分析:

不清楚,解决方法也比较玄学。


解决方案:

在数据库中将该表删除掉,重新创建表并赋予数据,当然实体类还是要在id字段上添加@TableId注解

思考:

好吧,其实也不玄学,说下自己的思考。
我们创建表的时候,表id字段是设置自动增长的,并且主键id也是正常的,如下(表中已有五条记录):
然后我们使用MybatisPlus的insert()方法来插入数据,我们第一次插入的时候是没有在id字段上添加@TableId注解,也就是说我们按照mybatisplus方式设置的主键值,是一个很大很大的数字。
执行该insert()方法后,我们可以在数据库表中看到自增id变成了个很大的值
查看表结构
此时我们肯定要查找资料,知道可以通过设置@TableId(type=IdType.AUTO)来让主键自动递增,于是我们这样做了
再度执行insert()方法来插入数据
欸,发现还是没有自动递增,我们期望的应该id是6,但事实上不是,那么真的自增没有生效吗?不是的,我们还是来看表的结构,发现"自动递增"这个字段的值就是刚才插入的id值加1。
也就是我们设置的自动递增生效了,但是由于第一次使用MybatisPlus的insert()方法插入导致自增id值变成很大的一个数,那么在表结构中"自动递增"这个字段的值也变成了很大的数加1,也就是下一个id的值。
我们插入主键自动增长也就是获取这个值,所以我们即使设置了@TableId注解,也失败了,因为"自动递增"字段已经变成了很大的数,那么下一次递增,也是在这个已有的数上加1。
而我所提供的解决方法就是重新构建表结构,那么"自动递增"这个字段的值又会恢复正常,而Java程序中使用了@TableId注解,也会插入成功。
也就是说我所提供的方法就是为了重置"自动递增"这个字段。
注意,我也视图直接通过修改这个字段或者使用"ALTER TABLE tb_user AUTO_INCREMENT=9;"语句来修改自动递增这个字段,但是失败了,因为这个字段只能改为比当前值大的数,不能改为比当前值小的数。
所以我暂时只想到这种方法:删除表,重新创建表结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值