Konfigurasi Strategi Penamaan Hibernate 5

1. Ikhtisar

Hibernate 5 menyediakan dua strategi penamaan yang berbeda untuk digunakan dengan entitas Hibernate: Strategi Penamaan Implisit dan Strategi Penamaan Fisik.

Dalam tutorial ini, kita akan melihat cara mengonfigurasi strategi penamaan tersebut untuk memetakan entitas ke nama tabel dan kolom yang disesuaikan.

Untuk pembaca yang baru mengenal Hibernate, pastikan untuk membaca artikel pengantar kami di sini.

2. Dependensi

Kami akan menggunakan ketergantungan Hibernate Core dasar untuk tutorial ini:

 org.hibernate hibernate-core 5.3.6.Final 

3. Strategi Penamaan Implisit

Hibernate menggunakan nama logis untuk memetakan entitas atau nama atribut ke nama tabel atau kolom. Nama ini dapat disesuaikan dengan dua cara : dapat diturunkan secara otomatis dengan menggunakan ImplicitNamingStrategy atau dapat didefinisikan secara eksplisit dengan menggunakan anotasi .

The ImplicitNamingStrategy mengatur bagaimana Hibernate berasal nama logis dari nama kelas dan properti Java kami. Kita dapat memilih dari empat strategi bawaan, atau kita dapat membuatnya sendiri.

Untuk contoh ini, kita akan menggunakan strategi default, ImplicitNamingStrategyJpaCompliantImpl. Dengan menggunakan strategi ini, nama logika akan sama dengan kelas Java dan nama properti kita.

Jika kita ingin menyimpang dari strategi ini untuk entitas tertentu, kita dapat menggunakan anotasi untuk membuat penyesuaian tersebut . Kita dapat menggunakan anotasi @Table untuk menyesuaikan nama @Entity . Untuk properti, kita dapat menggunakan anotasi @Column :

@Entity @Table(name = "Customers") public class Customer { @Id @GeneratedValue private Long id; private String firstName; private String lastName; @Column(name = "email") private String emailAddress; // getters and setters }

Dengan menggunakan konfigurasi ini, nama logis untuk entitas Pelanggan dan propertinya adalah:

Customer -> Customers firstName -> firstName lastName -> lastName emailAddress -> email

4. Strategi Penamaan Fisik

Sekarang setelah kita mengkonfigurasi nama logis kita, mari kita lihat nama fisik kita.

Hibernate menggunakan Strategi Penamaan Fisik untuk memetakan nama logis kita ke tabel SQL dan kolomnya.

Secara default, nama fisik akan sama dengan nama logis yang kita tentukan di bagian sebelumnya . Jika kita ingin menyesuaikan nama fisik, kita dapat membuat kelas PhysicalNamingStrategy kustom .

Misalnya, kami mungkin ingin menggunakan nama kasus unta dalam kode Java kami, tetapi kami ingin menggunakan nama yang dipisahkan garis bawah untuk nama tabel dan kolom kami yang sebenarnya dalam database.

Sekarang, kita dapat menggunakan kombinasi anotasi dan ImplicitNamingStrategy kustom untuk memetakan nama-nama ini dengan benar, tetapi Hibernate 5 menyediakan PhysicalNamingStrategy sebagai cara untuk menyederhanakan proses ini. Ini mengambil nama logis kami dari bagian sebelumnya dan memungkinkan kami untuk menyesuaikan semuanya di satu tempat.

Mari kita lihat bagaimana ini dilakukan.

Pertama, kami akan membuat strategi yang mengubah nama kasus unta kami untuk menggunakan format SQL kami yang lebih standar:

public class CustomPhysicalNamingStrategy implements PhysicalNamingStrategy { @Override public Identifier toPhysicalCatalogName(final Identifier identifier, final 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); } private Identifier convertToSnakeCase(final Identifier identifier) { final String regex = "([a-z])([A-Z])"; final String replacement = "$1_$2"; final String newName = identifier.getText() .replaceAll(regex, replacement) .toLowerCase(); return Identifier.toIdentifier(newName); } }

Terakhir, kami dapat memberi tahu Hibernate untuk menggunakan strategi baru kami:

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

Menggunakan strategi baru kami melawan entitas Pelanggan , nama fisiknya adalah:

Customer -> customers firstName -> first_name lastName -> last_name emailAddress -> email

5. Kesimpulan

Dalam artikel singkat ini, kita telah mempelajari hubungan antara Strategi Penamaan Implisit dan Fisik.

Kami juga telah melihat bagaimana menyesuaikan nama implisit dan fisik dari suatu entitas dan propertinya.

Anda dapat melihat kode sumber untuk tutorial ini di Github.