Spring BootでのHibernateフィールドの命名

Spring Bootを使用したHibernateフィールドの命名

1. 前書き

この簡単なチュートリアルでは、Spring BootアプリケーションでHibernate naming strategiesを使用する方法を説明します。

2. Mavenの依存関係

Maven-based Spring Boot applicationで始まり、Spring Dataを受け入れて満足している場合は、Spring DataJPA依存関係を追加するだけです。


    org.springframework.boot
    spring-boot-starter-data-jpa

また、データベースが必要なので、in-memory database H2を使用します。


    com.h2database
    h2
    runtime

Spring Data JPA依存関係は、Hibernate依存関係をもたらします。

3. SpringBootの命名戦略

Hibernate maps field names using a physical strategy and an implicit strategy. 以前、このtutorialで命名戦略を操作する方法について説明しました。

また、Spring Bootは、両方のデフォルトを提供します。

  • spring.jpa.hibernate.naming.physical-strategyのデフォルトはorg.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyで、

  • spring.jpa.hibernate.naming.implicit-strategy のデフォルトはorg.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy

これらの値はオーバーライドできますが、デフォルトでは次のようになります。

  • ドットをアンダースコアに置き換えます

  • キャメルケースをスネークケースに変更し、

  • 小文字のテーブル名

したがって、たとえば、AddressBook entityはaddress_book tableとして作成されます。

4. 実行中の戦略

Accountエンティティを作成する場合:

@Entity
public class Account {
    @Id
    private Long id;
    private String defaultEmail;
}

そして、プロパティファイルでいくつかのSQLデバッグをオンにします。

hibernate.show_sql: true

起動時に、ログに次のcreateステートメントが表示されます。

Hibernate: create table account (id bigint not null, default_email varchar(255))

ご覧のとおり、フィールドはスネークケースを使用しており、Springの規則に従って小文字になっています。

また、この場合はデフォルトを受け入れているため、physical-strategyまたはimplicit-strategy プロパティを指定する必要がないことに注意してください。

5. 戦略のカスタマイズ

したがって、JPA1.0の戦略を使用するとします。

プロパティファイルで指定するだけです。

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl

または、それらを@Beansとして公開します。

@Bean
public PhysicalNamingStrategy physical() {
    return new PhysicalNamingStrategyStandardImpl();
}

@Bean
public ImplicitNamingStrategy implicit() {
    return new ImplicitNamingStrategyLegacyJpaImpl();
}

いずれにせよ、これらの変更を加えて例を実行すると、わずかに異なるDDLステートメントが表示されます。

Hibernate: create table Account (id bigint not null, defaultEmail varchar(255), primary key (id))

ご覧のとおり、今回の戦略はJPA1.0の命名規則に従います。

ここで、JPA 2.0の命名規則を使用する場合は、暗黙の戦略としてImplicitNamingStrategyJpaCompliantImplを設定する必要があります。

6. 結論

このチュートリアルでは、Spring Bootが命名戦略をHibernateのクエリジェネレーターに適用する方法と、それらの戦略をカスタマイズする方法についても説明しました。

そして、いつものように、これらすべてのサンプルover on GitHubを確認してください。