Hibernate Field Naming с Spring Boot

Hibernate Field Naming с помощью Spring Boot

1. Вступление

В этом кратком руководстве мы увидим, как использоватьHibernate naming strategies в приложенииSpring Boot.

2. Maven Зависимости

Если мы начнем сMaven-based Spring Boot application и будем рады принять Spring Data, нам просто нужно добавить зависимость Spring Data JPA:


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

Также нам нужна база данных, поэтому мы будем использоватьin-memory database H2:


    com.h2database
    h2
    runtime

Зависимость Spring Data JPA приносит нам зависимости Hibernate.

3. Стратегии именования Spring Boot

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 будет создан как стабильныйaddress_book .

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. Настройка стратегий

Итак, допустим, мы хотим использовать стратегии из JPA 1.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))

Как мы видим, на этот раз эти стратегии соответствуют соглашению об именах JPA 1.0.

Теперь, если мы хотим использовать правила именования JPA 2.0, нам нужно установитьImplicitNamingStrategyJpaCompliantImpl в качестве нашей неявной стратегии.

6. Заключение

В этом руководстве мы увидели, как Spring Boot применяет стратегии именования к генератору запросов Hibernate, а также узнали, как настроить эти стратегии.

И, как всегда, не забудьте проверить все эти образцыover on GitHub.