gpt4 book ai didi

spring - Spring-boot 是否通过@GeneratedValue 改变了 ids 自动增量的工作方式?

转载 作者:IT老高 更新时间:2023-10-28 13:49:14 25 4
gpt4 key购买 nike

Spring-Boot 2.0.0 似乎修改了 Hibernate 的自动配置方式。

让我们假设两个简单且独立的 JPA 实体:

@Entity
class Car {
@Id
@GeneratedValue
private long id;
//....
}

@Entity
class Airplane {
@Id
@GeneratedValue
private long id;
//....
}

之前,使用 Spring-Boot 1.5.10,我能够生成单独的自动增量序列,这意味着我可以使用 获得 Car 1 作为主键,Airplane 也以 1 作为主键。它们之间没有相关性,例如没有共享序列。

现在,在 2.0.0 中,当我依次创建第一个 Car 然后是第一个 Airplane 时,汽车得到 1 作为 id 和飞机得到 2

看来他要处理GeneratedType.AUTO,也就是@GeneratedValue注解源中指定的“默认使用”。
但是,我的推理似乎到此为止,因为 GeneratedType.AUTO 也被 1.5.10 设置为默认值。

满足我期望的一个简单解决方法是指定 IDENTITY 生成策略类型,如下所示:

@Entity
class Car {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
//....
}

@Entity
class Airplane {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
//....
}

我无法解释这种行为。

Spring-boot 2.0.0 发生了什么变化,解释了这种情况?

最佳答案

Spring Boot 2.0 使用 Hibernate 5.2 (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes)。
Hibernate 从 5.2 开始改变了它的 GeneratedType.AUTO 策略。任何本身不支持序列的数据库(例如 MySQL),它们使用 TABLE 生成器而不是 IDENTITY。 (https://hibernate.atlassian.net/browse/HHH-11014)

这就是 GeneratedType.AUTO 无法按预期工作的原因。

关于spring - Spring-boot 是否通过@GeneratedValue 改变了 ids 自动增量的工作方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49241216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com