1. 序章

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

2. Mavenの依存関係

MavenベースのSpringBootアプリケーションから始めて、Spring Dataを喜んで受け入れる場合は、SpringDataJPA依存関係を追加するだけです。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

また、データベースが必要なので、インメモリデータベースH2を使用します。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

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

3. 春のブート命名戦略

Hibernateは、物理戦略と暗黙的な戦略を使用してフィールド名をマップします。 以前、この中で命名戦略をどのように扱うかについて話しましたチュートリアル

そして、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エンティティはaddress_bookテーブルとして作成されます。

4. 実行中の戦略

アカウントエンティティを作成する場合:

@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

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

@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のクエリジェネレーターに命名戦略を適用する方法と、それらの戦略をカスタマイズする方法も確認しました。

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