【发布时间】:2022-01-22 21:10:56
【问题描述】:
我在 docker 上使用 Spring Boot 2.6.1、Hibernate 5.6.1 和 Postgresql 14.1。我有一个名为 person 的实体,它扩展了一个基本实体类。
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
@Entity
public class Person extends BaseEntity {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
问题是当 Hibernate 在 Postgresql 上创建我的模式时,它会忽略 @GeneratedValue(strategy = GenerationType.AUTO) 并创建一个没有自动增量或标识机制的简单列。所以查询
INSERT INTO person(name) VALUES('Bob')
执行错误。 错误:关系“人”的“id”列中的空值违反非空约束
【问题讨论】:
-
尝试使用
@Generated Value(strategy = GenerationType.IDENTITY)默认情况下,根据 JPA 文档,这一代使用自动增量并为数据库分配值 e 开始使用GenerationType.SEQUENCE -
我已经尝试了所有 IDENTITY、TABLE 和 SEQUENCE 仍然没有任何反应。
标签: java postgresql spring-boot hibernate