如何在 Hibernate 中用 TableGenerator 替换已弃用的 MultipleHiLoPerTableGenerator

Posted

技术标签:

【中文标题】如何在 Hibernate 中用 TableGenerator 替换已弃用的 MultipleHiLoPerTableGenerator【英文标题】:How to replace deprecated MultipleHiLoPerTableGenerator with TableGenerator in Hibernate 【发布时间】:2017-01-06 18:52:38 【问题描述】:

我在 Spring Boot 1.4.0.RELEASE 的应用程序中使用休眠。

索引的实体看起来类似于:

@Entity(name = "SearchableTariffItem")
@Indexed
public class SearchableTariffItem 
    public static final String ZIFFER_ANALYZER_NAME = "ZIFFER_ANALYZER";

    @GeneratedValue(strategy = GenerationType.TABLE)
    @Id
    private Long id;
    ...

我现在第一次保存实体时收到以下警告:

2016-08-26 15:08:32.501 WARN 8476 — [apr-8080-exec-6] org.hibernate.orm.deprecation : HHH90000015: Found use of deprecated [org.hibernate.id.MultipleHiLoPerTableGenerator] table-based id generator; use org.hibernate.id.enhanced.TableGenerator instead. See Hibernate Domain Model Mapping Guide for details.

不幸的是,我不知道在哪里可以配置我的应用程序(最好在 application.yml 中)以使用 TableGenerator 类。

我使用以下依赖项:

休眠核心 5.0.9.Final 休眠搜索 ORM 5.5.1.Final Lucene 5.3.1

【问题讨论】:

【参考方案1】:

在 Hibernate 中控制此行为的属性是 hibernate.id.new_generator_mappings,在 Hibernate 5 中默认为 true -> 这意味着将使用新的 TableGenerator 而不是已弃用的 MultipleHiLoPerTableGenerator

然而,Spring Boot 将此属性默认为 false,这意味着将使用旧的生成器,除非您明确告诉它您想要新的生成器。 您需要将属性spring.jpa.hibernate.use-new-id-generator-mappings 设置为true 才能获取TableGenerator。

见https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes#generator-mappings

【讨论】:

还有“alter table hibernate_sequences rename column sequence_next_hi_value to next_val;”更改后可能需要 你知道为什么 Spring Boot 将这个设置为 false 吗? Spring Boot 设置为 false 以保持向后兼容性,因此您不需要更改 leo 评论的数据库模型。

以上是关于如何在 Hibernate 中用 TableGenerator 替换已弃用的 MultipleHiLoPerTableGenerator的主要内容,如果未能解决你的问题,请参考以下文章

LLVM每日谈之五十七 TableGen

JPA 或 Hibernate 生成(非主键)列值,不是从 1 开始

LLVM 之后端篇:零基础快速入门 TableGen

LLVM 之后端篇:零基础快速入门 TableGen

在hibernate中用sql语句

在hibernate中用到的内连接查到数据怎么用