我正在将我的项目升级到使用 Hibernate 5.3.18 的 Spring Boot 2.1.18。
以前,我的实体看起来像这样,并且会使用 SequenceHiLoGenerator:
@Entity
@Table(name = "group_link")
@SequenceGenerator(name = "group_link_seq", sequenceName = "group_link_seq")
public class GroupLinkEntity extends BaseObject {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "group_link_seq")
@Column(name = "group_link_id", unique = true, nullable = false)
private Long id
}
现在,默认情况下,在 Hibernate 5 中,它使用 SequenceStyleGenerator 导致违反约束,因为我的增量大小为 1,默认分配大小为 50。
保持兼容性的建议是设置此属性:
spring.jpa.properties.hibernate.use-new-id-generator-mappings: false
我这样做了,但似乎不需要,因为仍然使用 SequenceStyleGenerator。据我了解,这应该会导致它使用 SequenceHiLoGenerator。这是不正确的吗?
但是,如果我将实体修改为如下所示,它会按预期工作,复制我以前的功能。
@Entity
@Table(name = "group_link")
@GenericGenerator(
name = "group_link_seq",
strategy = "org.hibernate.id.SequenceHiLoGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "group_link_seq"),
}
)
public class GroupLinkEntity extends BaseObject {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "group_link_seq")
@Column(name = "group_link_id", unique = true, nullable = false)
private Long id;
}
因此,似乎该财产并未以某种方式被占用,我正在寻找原因。我看到它出现在我的 JpaProperties bean 中。如果我更改其他属性,例如我的方言,我可以看到它们正在生效。
谁能指出我实际读取该属性并决定使用哪个生成器的代码或指出我在这里犯的一些明显错误?