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

2023-10-29

异常

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

原因

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

解决

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

还可以参考这位@TableId(value = “id“,type = IdType.AUTO) 设置后无效的解决办法的解决方式,也比较玄学。

思考

好吧,其实也不玄学,说下自己的思考。

我们创建表的时候,表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;"语句来修改自动递增这个字段,但是失败了,因为这个字段只能改为比当前值大的数,不能改为比当前值小的数

所以我暂时只想到这种方法:删除表,重新创建表结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 自然语言处理的应用,自然语言处理就业前景

    自然语言处理是一项多领域交叉的技术 具有广泛的应用和就业前景 以下是一些主要的应用场景 1 智能客服 利用自然语言处理技术实现智能问答系统 自动回复 机器人客服等服务 提高客户满意度和效率 2 搜索引擎优化 自然语言处理可以帮助搜索引擎更好

随机推荐