起因: 一开始我发现我页面和数据库中用户id不一致,导致我通过id删除用户操作时,找不到对应id,结果导致删除不了。如下图:
解决过程:
① 我第一想到的办法就是能不能把生成的id变的短而简单,比如1,2,3,4... 这样就不会让页面和数据库的id不一致。于是我就给实体类主键添加@TableId(value="id",type=IdType.AUTO) 注解,
让主键id不使用雪花算法生成id,用数据库自增id的形式生成id(此时如果你数据库id并没有设置为自增,那就会报错!)
PS: 很多人添加了上图注解后,添加User后仍然发现生成的id是19位的数字,其实并不是因为这个@TableId没生效,而是因为数据库保留了之前雪花算法id的最大值,从此以后就以这个最大值为基础进行自增。
还有,如果你简单的以为把数据库表中原先19位的用户id全部改为1,2,3,4....等短而简单的数字作为id,配合@TableId注解,想着添加新的User的时候生成的 id 就不会是19位的数字了,但结果依旧为19位的数字,还是那句话数据库保留了之前雪花算法id的最大值,从此以后就以这个最大值为基础进行自增。
看来只有我把数据库的表删了,重新建表,这样让数据库由于id自增保留的最大id清空,最终发现添加新User就变成了1,2,3,4......成功解决!!!
②还有个办法就是把User的id改成String类型,这样也能让前端JS和后端的id一致。
或者在项目中都是将注解标注在对应字段上,在Json序列化的时候把Long自动转为String。
@JsonSerialize(using = ToStringSerializer.class)
private Long id;