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.