Hibernate 5 Konfiguracija strategije imenovanja

1. Pregled

Hibernate 5 nudi dvije različite strategije imenovanja za upotrebu s Hibernate entitetima: Strategija implicitnog imenovanja i Strategija fizičkog imenovanja.

U ovom uputstvu vidjet ćemo kako konfigurirati te strategije imenovanja za mapiranje entiteta u prilagođena imena tablica i stupaca.

Čitateljima koji su tek započeli hibernaciju, pogledajte ovdje naš uvodni članak.

2. Ovisnosti

Za ovaj ćemo vodič koristiti osnovnu ovisnost Hibernate Core:

 org.hibernate hibernate-core 5.3.6.Final 

3. Implicitna strategija imenovanja

Hibernate koristi logički naziv za mapiranje entiteta ili imena atributa u naziv tablice ili stupca. Ovo ime može se prilagoditi na dva načina: može se automatski izvesti pomoću ImplicitNamingStrategy ili se može eksplicitno definirati pomoću bilješki.

The ImplicitNamingStrategy uređuje kako Hibernate izvodi logično ime iz naše Java klase i imena svojstava. Možemo birati između četiri ugrađene strategije ili možemo stvoriti vlastitu.

U ovom ćemo se primjeru poslužiti zadanom strategijom, ImplicitNamingStrategyJpaCompliantImpl. Koristeći ovu strategiju, logička imena bit će ista kao naša Java klasa i imena svojstava.

Ako želimo odstupiti od ove strategije za određeni entitet, možemo upotrijebiti napomene za izradu tih prilagodbi. Možemo koristiti @Stol napomena za prilagodbu imena @ Entitet. Za nekretninu možemo koristiti @Stupac napomena:

@Entity @Table (name = "Kupci") kupac javne klase {@Id @GeneratedValue private Long id; private String firstName; private String lastName; @Column (name = "email") privatni niz emailAddress; // geteri i postavljači}

Koristeći ovu konfiguraciju, logična imena za Kupac entitet i njegova svojstva bi bila:

Kupac -> Kupci firstName -> firstName lastName -> lastName emailAddress -> email

4. Strategija fizičkog imenovanja

Sad kad smo konfigurirali naša logička imena, pogledajmo naša fizička imena.

Hibernate koristi Strategiju fizičkog imenovanja da mapira naša logička imena u SQL tablicu i njene stupce.

Prema zadanim postavkama, fizičko ime bit će isto kao i logičko ime koje smo naveli u prethodnom odjeljku. Ako želimo prilagoditi fizička imena, možemo stvoriti prilagođeni PhysicalNamingStrategy razred.

Na primjer, možda ćemo htjeti koristiti nazive slučajeva deva u našem Java kodu, ali želimo koristiti podvučena odvojena imena za naša stvarna imena tablica i stupaca u bazi podataka.

Sad bismo mogli upotrijebiti kombinaciju bilješki i običaj ImplicitNamingStrategy za pravilno mapiranje ovih imena, ali Hibernate 5 nudi PhysicalNamingStrategy kao način pojednostavljenja ovog postupka. Uzima naša logična imena iz prethodnog odjeljka i omogućuje nam da ih sve prilagodimo na jednom mjestu.

Da vidimo kako se to radi.

Prvo ćemo stvoriti strategiju koja pretvara nazive slučajeva deva da bi koristila naš standardniji SQL format:

javna klasa CustomPhysicalNamingStrategy implementira PhysicalNamingStrategy {@Override javni identifikator toPhysicalCatalogName (konačni identifikator identifikatora, konačni JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifikator); } @Override javni identifikator toPhysicalColumnName (konačni identifikator identifikatora, konačni JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifikator); } @Override javni identifikator toPhysicalSchemaName (konačni identifikator identifikatora, konačni JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifikator); } @Override javni identifikator toPhysicalSequenceName (konačni identifikator identifikatora, konačni JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifikator); } @Override javni identifikator toPhysicalTableName (konačni identifikator identifikatora, konačni JdbcEnvironment jdbcEnv) {return convertToSnakeCase (identifikator); } privatni identifikator convertToSnakeCase (konačni identifikator identifikatora) {final String regex = "([a-z]) ([A-Z])"; završna zamjena niza = "$ 1_ $ 2"; završni niz newName = identifier.getText () .replaceAll (regularni izraz, zamjena) .toLowerCase (); vrati Identifier.toIdentifier (novoIme); }}

Napokon, Hibernatu možemo reći da koristi našu novu strategiju:

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

Koristeći našu novu strategiju protiv Kupac entiteta, fizička imena bi bila:

Kupac -> kupci firstName -> first_name lastName -> last_name emailAddress -> email

5. Zaključak

U ovom kratkom članku naučili smo vezu između implicitne i fizičke strategije imenovanja.

Također smo vidjeli kako prilagoditi implicitna i fizička imena entiteta i njegovih svojstava.

Izvorni kod za ovaj vodič možete pogledati na Githubu.