web-dev-qa-db-ja.com

Hibernateで非推奨のMultipleHiLoPerTableGeneratorをTableGeneratorに置き換える方法

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.

残念ながら、TableGeneratorクラスを使用するように(できればapplication.ymlで)アプリケーションを構成できる場所がわかりません。

私は次の依存関係を使用します:

  • Hibernateコア5.0.9.Final
  • Hibernate search ORM 5.5.1.Final
  • Lucene 5.3.1
17
leo

Hibernateでこの動作を制御するプロパティはhibernate.id.new_generator_mappingsであり、Hibernate 5ではデフォルトでtrueになっています->これは、廃止予定のTableGeneratorの代わりに新しいMultipleHiLoPerTableGeneratorが使用されることを意味します。

ただし、Spring Bootはこのプロパティをデフォルトでfalseに設定します。つまり、新しいジェネレータが必要なことを明示的に指定しない限り、古いジェネレータが使用されます。 TableGeneratorを取得するには、プロパティspring.jpa.hibernate.use-new-id-generator-mappingstrueに設定する必要があります。

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes#generator-mappings を参照してください

41
Andrei Socaciu