spring-boot - Spring Boot Hibernate 没有获取 use-new-id-generator-mappings 属性

标签 spring-boot hibernate hibernate-5.x sequence-generators hilo

我正在将我的项目升级到使用 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,默认的 allocationSize 为 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;
    
}

因此,属性(property)似乎没有以某种方式被占用,我正在寻找原因。我看到它出现在我的 JpaProperties bean 中。如果我更改其他属性,例如我的方言,我可以看到它们正在生效。

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

最佳答案

documentation 中所述:

You need to ensure that names defined under spring.jpa.properties.* exactly match those expected by your JPA provider. Spring Boot will not attempt any kind of relaxed binding for these entries.

For example, if you want to configure Hibernate’s batch size you must use spring.jpa.properties.hibernate.jdbc.batch_size. If you use other forms, such as batchSize or batch-size, Hibernate will not apply the setting.

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

spring.jpa.properties.hibernate.id.new_generator_mappings: false

另见 this part hibernate 文档。

关于spring-boot - Spring Boot Hibernate 没有获取 use-new-id-generator-mappings 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66375370/

相关文章:

hibernate - 如何在 Spring Boot Data Jpa 应用程序中使用条件查询

java - 可扩展网格 Vaadin UI

java - Hibernate 没有在 Spring Boot 项目中抛出 LazyInitializationException

java-8 - HibernateTemplate 抛出 java.lang.NoSuchMethodError : org. hibernate.Session.getFlushMode() -- Spring4.2.6, Hibernate5.2

hibernate - 在Grails 4.0.1中刷新 session

java - Hibernate 4 -> 5 迁移 : NamingStrategy changes, 找不到表

java - 使用 Gradle 和 Docker 部署 Spring Boot/PostgreSQL 项目

java - Thymeleaf 启动时出错

mysql - 事务回滚在 karaf 中不起作用

java - JPA:查询对反向一对一关系有限制的实体