问题描述
整合 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模块进行测试。发现表名写错了。
解决方法
- 去除相同表名即可