Flo*_*est 14 spring hibernate jpa spring-data-jpa spring-boot
Spring-Boot 2.0.0似乎修改了Hibernate自动配置的方式.
让我们假设两个简单而独立的JPA实体:
@Entity
class Car {
@Id
@GeneratedValue
private long id;
//....
}
@Entity
class Airplane {
@Id
@GeneratedValue
private long id;
//....
}
Run Code Online (Sandbox Code Playgroud)
在此之前,使用Spring-Boot的1.5.10,我是能够产生自动递增的单独序列,这意味着我可以得到一个Car
带有1个作为主键和Airplane
带1个作为主键也.它们之间没有相关性,例如没有共享序列.
现在,使用2.0.0,当我顺序创建第一个Car
然后第一个时Airplane
,汽车获得1作为id并且飞机获得2.
看来他必须处理注释源中GeneratedType.AUTO
指定的"默认使用" @GeneratedValue
.
但是,我的推理似乎停在这里因为1.5.10GeneratedType.AUTO
也设置为默认值.
实现我的期望的一个简单的解决方法是指定IDENTITY
生成的策略类型,如下所示:
@Entity
class Car {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
//....
}
@Entity
class Airplane {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
//....
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这种行为的解释.
什么使Spring-boot 2.0.0发生了变化,解释了这种情况?
小智 13
Spring Boot 2.0使用Hibernate 5.2(https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes).自5.2以来,
Hibernate改变了它的GeneratedType.AUTO
策略.任何本机不支持序列的数据库(例如MySQL)都使用TABLE生成器而不是IDENTITY.(https://hibernate.atlassian.net/browse/HHH-11014)
这就是为什么GeneratedType.AUTO
不能按预期工作的原因.
您可以使用
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
Run Code Online (Sandbox Code Playgroud)
使用MySQL自动增量。
归档时间: |
|
查看次数: |
11474 次 |
最近记录: |