多个Spring boot 2.0.1 整合 JPA 自增失效,排查过程记录.

问题描述

整合 network、user、wechat、cent等模块后,用户ID 自增失效。

关键代码及问题重现过程

@Entity
@Table(name = "user")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @Column(length = 765)
    private String image;

    @Column
    private String name;

    @Column
    private String signature;

    @Column(length = 3)
    private String sex;

    @Column
    private Date updateTime;

    @Column
    private Date createTime;
}

单独模块时可以正常运行!

User user = new User();
user.setCreateTime(new Date());
user.setName(usernameRegisterRequest.getUsername());
user.setUpdateTime(new Date());

userRepository.save(user);
//保存成功

整合模块后出现问题如果下: Field 'id' doesn't have a default value

Hibernate: insert into user (create_time, image, name, sex, signature, update_time) values (?, ?, ?, ?, ?, ?)
2018-04-26 14:56:37.457  WARN 30572 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1364, SQLState: HY000
2018-04-26 14:56:37.457 ERROR 30572 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : Field 'id' doesn't have a default value

开始排查

  • 排查配置pom文件无不同版本 JPA , 和JDBC。
  • 切换nac项目到 user模块同库,还是不行 ID字段 还是未生成id bigint(20) NOT NULL AUTO_INCREMENT
  • 移除除user模块引用,移除其它模块后果然正常了.
  • 也除application.yml问题
  • 再一个个往回引用排查问题所在模块.
  • 排查到SMS模块引起,开始分析SMS模块不同的POM引用为:

            com.aliyun
            aliyun-java-sdk-core
            2.4.2
        

        
            com.aliyun
            aliyun-java-sdk-dysmsapi
            1.0.0
        
  • 难点再去这个鬼一但去除,SMS模块就奔溃。思考:就这两个引用不同不应该会冲突到jpa生成。
  • 排除SMS引用旧版本引起,重新打包SMS 问题还是存在。
  • 为了不让自己对jar包对到眼睛瞎我还是决除,移除这两个引及相关引用类。
  • 还是不行。。。那得回之前添加wechat时,可能引wechat模块未重新编译引起.
  • 清除编译文件,清除库继续. 测试通过。。。看来还是sms的问题。。。这就奇怪了。
  • 重新引入SMS模块.并发sms进行测试,发现问题,两个模块使用了同个表名。
@Entity
@Table(name = "user")
public class User implements Serializable
@Entity
@Table(name = "user")
public class Sms implements Serializable 
  • HIbernate不对其报错有点坑。

发现问题

  • 由于过于高速对mybatis切换到 JPA未对SMS模块进行测试。发现表名写错了。

解决方法

  • 去除相同表名即可

你可能感兴趣的:(多个Spring boot 2.0.1 整合 JPA 自增失效,排查过程记录.)