AHu*_*ist 3 hibernate hilo sequence-generators spring-boot hibernate-5.x
我正在将我的项目升级到使用 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
}
Run Code Online (Sandbox Code Playgroud)
现在,默认情况下,在 Hibernate 5 中,它使用 SequenceStyleGenerator,这会导致约束冲突,因为我的增量大小为 1,默认的 allocateSize 为 50。
为了保持兼容性,建议设置此属性:
spring.jpa.properties.hibernate.use-new-id-generator-mappings: false
Run Code Online (Sandbox Code Playgroud)
我这样做了,但似乎不需要,因为仍然使用 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;
}
Run Code Online (Sandbox Code Playgroud)
所以,看来该财产没有以某种方式被拿走,我正在寻找原因。我看到它出现在我的 JpaProperties bean 中。如果我更改其他属性(例如我的方言),我可以看到它们正在生效。
谁能向我指出实际读取该属性并决定使用哪个生成器的代码,或者指出我在这里犯的一些明显错误?
正如文档中所述:
\n\n\n您需要确保下面定义的名称
\nspring.jpa.properties.*与 JPA 提供者期望的名称完全匹配。Spring Boot 不会尝试对这些条目进行任何类型的宽松绑定。例如,如果要配置 Hibernate\xe2\x80\x99s 批处理大小,则必须使用
\nspring.jpa.properties.hibernate.jdbc.batch_size. 如果您使用其他形式,例如batchSize或batch-size,Hibernate 将不会应用该设置。
因此,对于您的情况,您应该使用:
\nspring.jpa.properties.hibernate.id.new_generator_mappings: false\nRun Code Online (Sandbox Code Playgroud)\n另请参阅hibernate 文档的这一部分。
\n| 归档时间: |
|
| 查看次数: |
10344 次 |
| 最近记录: |