如何使用 JPA GenerationType.AUTO 提供初始值或增量 ID

rdj*_*dj7 4 java post hibernate jpa spring-data-jpa

我正在使用以下代码来定义MyEntity

@Entity
@Table(name = "MY_TABLE")
public class MyEntity {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "MY_TABLE_ID")
private Integer myTableId;

@Column(name = "MY_TABLE_NM")
private String myTableName;

//Getters Setters
}
Run Code Online (Sandbox Code Playgroud)

对于POST我的应用程序启动后的第一次,我创建MyEntity一切正常,MY_TABLE_ID从 1 开始并按预期工作。

我的问题是,如果有人在我做我之前手动插入数据,POST那么我会得到重复的键异常,因为myTableId输入为 1 已经存在。

我的主要问题是我无法创建database sequence用于GenerationType.SEQUENCEnow 解决此问题,因为现在无法更改数据库。我尝试了 的各种组合GenerationTypeTableGenerator但我无法成功解决它。

设置initialValue更大的数字以避免重复值可以暂时解决我的问题,但我也无法做到。

如果有人可以帮助我initialValueAUTO,或给我不数据库更改一些其他更好的解决方案将是巨大的:)

Xtr*_*mer 5

作为MY_TABLE_ID标识列,以下注释将起作用。

@Entity
@Table(name = "MY_TABLE")
public class MyEntity {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY) // <-- IDENTITY instead of AUTO
@Column(name = "MY_TABLE_ID")
private Integer myTableId;

@Column(name = "MY_TABLE_NM")
private String myTableName;

//Getters Setters
}
Run Code Online (Sandbox Code Playgroud)

事务提交后,标识列将自动分配一个值。您不必为标识列设置任何值,因为分配值是数据库的工作。因此,您也不需要考虑任何初始值(对于标识列完全忘记它们)