Nommer des champs Hibernate avec Spring Boot

Dénomination de champ Hibernate avec Spring Boot

1. introduction

Dans ce bref tutoriel, nous verrons comment utiliser lesHibernate naming strategies dans une applicationSpring Boot.

2. Dépendances Maven

Si nous commençons par unMaven-based Spring Boot application et que nous sommes heureux d'adopter Spring Data, il nous suffit d'ajouter la dépendance Spring Data JPA:


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

De plus, nous avons besoin d'une base de données, nous allons donc utiliser lesin-memory database H2:


    com.h2database
    h2
    runtime

La dépendance Spring Data JPA nous apporte les dépendances Hibernate.

3. Stratégies de dénomination de Spring Boot

Hibernate maps field names using a physical strategy and an implicit strategy.  Nous avons déjà parlé de la manière de travailler avec les stratégies de dénomination dans cetutorial.

Et, Spring Boot, fournit des valeurs par défaut pour les deux:

  • spring.jpa.hibernate.naming.physical-strategy est par défautorg.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy, et

  • spring.jpa.hibernate.naming.implicit-strategy  par défaut surorg.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy

Nous pouvons remplacer ces valeurs, mais par défaut, elles:

  • Remplacer les points par des traits de soulignement

  • Changer le cas de chameau en cas de serpent, et

  • Noms de table en minuscule

Ainsi, par exemple, une sentitéAddressBook erait créée en tant queaddress_book table.

4. Stratégies en action

Si nous créons une entitéAccount:

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

Et activez ensuite le débogage SQL dans notre fichier de propriétés:

hibernate.show_sql: true

Au démarrage, nous verrons l'instructioncreate suivante dans nos journaux:

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

Comme nous pouvons le constater, les champs utilisent la casse du serpent et sont en minuscule, conformément aux conventions de Spring.

Et rappelez-vous que nous n'avons pas besoin de spécifier les propriétésphysical-strategy ouimplicit-strategy dans ce cas puisque nous acceptons les valeurs par défaut.

5. Personnalisation des stratégies

Alors, disons que nous voulons utiliser les stratégies de JPA 1.0.

Il suffit de l'indiquer dans notre fichier de propriétés:

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

Ou, exposez-les en tant que@Beans:

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

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

Dans tous les cas, si nous exécutons notre exemple avec ces modifications, nous verrons une instruction DDL légèrement différente:

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

Comme nous pouvons le voir, cette fois, ces stratégies suivent la convention de dénomination de JPA 1.0.

Maintenant, si nous voulions utiliser les règles de nommage JPA 2.0, nous devions définirImplicitNamingStrategyJpaCompliantImpl comme stratégie implicite.

6. Conclusion

Dans ce didacticiel, nous avons vu comment Spring Boot applique des stratégies de dénomination au générateur de requêtes d'Hibernate, et nous avons également vu comment personnaliser ces stratégies.

Et, comme toujours, assurez-vous de vérifier tous ces échantillonsover on GitHub.