我在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