@GeneratedValue(strategy = GenerationType.AUTO):MySQL 和生成的 I



我在MySQL数据库中有一些表。我正在实现一个 Spring 启动应用程序,现在正在测试数据库。我有@Entities:

public class Author implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
...
public class Publisher implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

我的问题如下: 当我将上述内容保存在MySQL数据库中时,数据库中生成的ID是"共享"的。我的意思是,例如,首先发布者表获取 ID 1,作者获取 ID 2 和 3。然后,在下一次运行中,发布服务器获取 ID 4,以及作者 5 和 6。等等。我想要的是:发布者表获得 ID 1 2 3...,作者获得 ID 1 2 3...这可能吗?我正在使用MySQL数据库和带有JPA依赖项的Spring Boot。

发生这种情况是因为在任何本身不支持序列的数据库(例如 MySQL(上,当生成类型设置为 AUTO 时,hibernate 使用的是 TABLE 生成器而不是 IDENTITY。您可以检查 hibernate 是否生成了具有 id 序列的表,该表将告诉下一个要使用的 id (hibernate_sequence(。

您正在寻找身份生成器:

public class Author implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
...
public class Publisher implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

更多信息:

https://www.baeldung.com/hibernate-identifiers#2-identity-generation

https://hibernate.atlassian.net/browse/HHH-11014

最新更新