Hibernate 5 Naamgevingsstrategieconfiguratie

1. Overzicht

Hibernate 5 biedt twee verschillende naamgevingsstrategieën voor gebruik met Hibernate-entiteiten: een impliciete naamgevingsstrategie en een fysieke naamgevingsstrategie.

In deze zelfstudie zullen we zien hoe u die naamgevingsstrategieën configureert om entiteiten toe te wijzen aan aangepaste tabel- en kolomnamen.

Lezers die nieuw zijn bij Hibernate, moeten ons inleidende artikel hier lezen.

2. Afhankelijkheden

We zullen de standaard Hibernate Core-afhankelijkheid gebruiken voor deze tutorial:

 org.hibernate hibernate-core 5.3.6.Final 

3. Impliciete naamgevingsstrategie

Hibernate gebruikt een logische naam om een ‚Äč‚Äčentiteits- of attribuutnaam toe te wijzen aan een tabel- of kolomnaam. Deze naam kan op twee manieren worden aangepast: het kan automatisch worden afgeleid door een ImplicitNamingStrategy of het kan expliciet worden gedefinieerd door annotaties te gebruiken.

De ImplicitNamingStrategy bepaalt hoe Hibernate een logische naam ontleent aan onze Java-klasse en eigenschapsnamen. We kunnen kiezen uit vier ingebouwde strategieën, of we kunnen onze eigen strategieën ontwikkelen.

Voor dit voorbeeld gebruiken we de standaardstrategie, ImplicitNamingStrategyJpaCompliantImpl. Met deze strategie zullen de logische namen hetzelfde zijn als onze Java-klasse en eigenschapsnamen.

Als we voor een specifieke entiteit willen afwijken van deze strategie, kunnen we annotaties gebruiken om die aanpassingen aan te brengen. We kunnen de @Tafel annotatie om de naam van een @Entiteit. Voor een woning kunnen we gebruik maken van de @Kolom annotatie:

@Entity @Table (name = "Klanten") openbare klasse Klant {@Id @GeneratedValue privé Lange id; private String voornaam; private String achternaam; @Column (name = "email") private String emailAddress; // getters en setters}

Met behulp van deze configuratie kunnen de logische namen voor het Klant entiteit en zijn eigenschappen zouden zijn:

Klant -> Voornaam klant -> voornaam achternaam -> achternaam e-mailadres -> e-mail

4. Fysieke naamgevingsstrategie

Nu we onze logische namen hebben geconfigureerd, gaan we eens kijken naar onze fysieke namen.

Hibernate gebruikt de Physical Naming Strategy om onze logische namen toe te wijzen aan een SQL-tabel en de bijbehorende kolommen.

Standaard is de fysieke naam hetzelfde als de logische naam die we in de vorige sectie hebben gespecificeerd. Als we de fysieke namen willen aanpassen, kunnen we een aangepaste PhysicalNamingStrategy klasse.

We willen bijvoorbeeld camel case-namen gebruiken in onze Java-code, maar we willen door onderstrepingstekens gescheiden namen gebruiken voor onze werkelijke tabel- en kolomnamen in de database.

Nu kunnen we een combinatie van annotaties en een aangepaste ImplicitNamingStrategy om deze namen correct toe te wijzen, maar Hibernate 5 biedt de PhysicalNamingStrategy als een manier om dit proces te vereenvoudigen. Het neemt onze logische namen uit de vorige sectie en stelt ons in staat ze allemaal op één plek aan te passen.

Laten we eens kijken hoe dit wordt gedaan.

Eerst maken we een strategie die de namen van onze kameelgevallen converteert naar ons meer standaard SQL-formaat:

openbare klasse CustomPhysicalNamingStrategy implementeert PhysicalNamingStrategy {@Override public Identifier toPhysicalCatalogName (laatste ID-ID, laatste JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifier); } @Override public Identifier toPhysicalColumnName (final Identifier identifier, final JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifier); } @Override public Identifier toPhysicalSchemaName (final Identifier identifier, final JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifier); } @Override public Identifier toPhysicalSequenceName (final Identifier identifier, final JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifier); } @Override public Identifier toPhysicalTableName (final Identifier identifier, final JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifier); } privé-ID convertToSnakeCase (laatste ID-ID) {final String regex = "([a-z]) ([A-Z])"; laatste String vervanging = "$ 1_ $ 2"; final String newName = identifier.getText () .replaceAll (regex, vervanging) .toLowerCase (); retourneer Identifier.toIdentifier (newName); }}

Eindelijk kunnen we Hibernate vertellen om onze nieuwe strategie te gebruiken:

hibernate.physical_naming_strategy = com.baeldung.hibernate.namingstrategy.CustomPhysicalNamingStrategy

Met behulp van onze nieuwe strategie tegen de Klant entiteit, de fysieke namen zouden zijn:

Klant -> klanten voornaam -> voornaam achternaam -> achternaam emailAddress -> email

5. Conclusie

In dit korte artikel hebben we de relatie tussen de impliciete en fysieke naamgevingsstrategieën geleerd.

We hebben ook gezien hoe we de impliciete en fysieke namen van een entiteit en zijn eigenschappen kunnen aanpassen.

Je kunt de broncode voor deze tutorial bekijken op Github.