Spring Boot Hibernate 未获取 use-new-id-generator-mappings 属性

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 中。如果我更改其他属性(例如我的方言),我可以看到它们正在生效。

谁能向我指出实际读取该属性并决定使用哪个生成器的代码,或者指出我在这里犯的一些明显错误?

Ste*_*rnK 7

正如文档中所述:

\n
\n

您需要确保下面定义的名称spring.jpa.properties.*与 JPA 提供者期望的名称完全匹配。Spring Boot 不会尝试对这些条目进行任何类型的宽松绑定。

\n

例如,如果要配置 Hibernate\xe2\x80\x99s 批处理大小,则必须使用spring.jpa.properties.hibernate.jdbc.batch_size. 如果您使用其他形式,例如batchSizebatch-size,Hibernate 将不会应用该设置。

\n
\n

因此,对于您的情况,您应该使用:

\n
spring.jpa.properties.hibernate.id.new_generator_mappings: false\n
Run Code Online (Sandbox Code Playgroud)\n

另请参阅hibernate 文档的这一部分。

\n