美文网首页
多个Spring boot 2.0.1 整合 JPA 自增失效,

多个Spring boot 2.0.1 整合 JPA 自增失效,

作者: 大继 | 来源:发表于2019-06-28 00:51 被阅读0次

    问题描述

    整合 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引用为:
    <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>2.4.2</version>
            </dependency>
    
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
                <version>1.0.0</version>
            </dependency>
    
    • 难点再去这个鬼一但去除,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 自增失效,

          本文链接:https://www.haomeiwen.com/subject/hfzplftx.html