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

19

我在一个使用spring boot 1.4.0.RELEASE的应用程序中使用了hibernate。

索引的实体看起来大致如下:

@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类。

我使用以下依赖项:

  • Hibernate核心5.0.9.Final
  • Hibernate搜索ORM 5.5.1.Final
  • Lucene 5.3.1
1个回答

43
控制 Hibernate 行为的属性为 hibernate.id.new_generator_mappings,默认为 true(Hibernate 5)-> 这意味着将使用新的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

3
在更改后可能需要执行以下命令:"alter table hibernate_sequences rename column sequence_next_hi_value to next_val;" - leo
2
你知道为什么Spring Boot将这个设置为false吗? - GabrielBB
1
Spring Boot 将 backward compatibility 设置为 false,因此无需像 Leo 所评论的那样更改数据库模型。 - mapm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接