Saya sedang mengerjakan proyek aplikasi boot Spring saya dan memperhatikan bahwa, terkadang ada kesalahan waktu koneksi habis ke Database saya di server lain (SQL Server). Ini terjadi secara khusus ketika saya mencoba melakukan migrasi skrip dengan FlyWay
tetapi berfungsi setelah beberapa kali mencoba.
Kemudian saya perhatikan bahwa saya tidak menentukan spring.jpa.hibernate.ddl-auto
dalam file properti saya. Saya melakukan beberapa penelitian dan menemukan bahwa itu disarankan untuk ditambahkan
spring.jpa.hibernate.ddl-auto= create-drop
dalam pengembangan. Dan mengubahnya menjadi: spring.jpa.hibernate.ddl-auto= none
dalam produksi.
Tapi saya tidak benar-benar mengerti bagaimana cara kerjanya dan bagaimana hibernate menghasilkan skema database menggunakan create-drop
atau none
nilai. Bisakah Anda menjelaskan secara teknis bagaimana cara kerjanya, dan apa saja rekomendasi untuk menggunakan properti ini dalam pengembangan dan pada server produksi. Terima kasih
none
tetapi Anda mungkin ingin tabel Hibernate Search dan Envers dibuat menggunakanupdate
karena mereka dikelola secara internal oleh proyek-proyek tersebut dan Anda tidak ingin mengelolanya sendiri secara manual. Sekarang kami mengontrol ini secara global untuk semua tabel terlepas dari asal / sumbernya. Ini selanjutnya akan menjadi alasan untuk menggunakan opsi khusus vendor jika Anda ingin menggunakan ini.Jawaban:
Sebagai catatan,
spring.jpa.hibernate.ddl-auto
properti ini khusus untuk Spring Data JPA dan merupakan cara mereka untuk menentukan nilai yang pada akhirnya akan diteruskan ke Hibernate di bawah properti yang diketahuinya ,hibernate.hbm2ddl.auto
.Nilai-nilai
create
,create-drop
,validate
, danupdate
pada dasarnya mempengaruhi bagaimana pengelolaan alat skema akan memanipulasi skema database saat startup.Misalnya,
update
operasi akan meminta API driver JDBC untuk mendapatkan metadata database dan kemudian Hibernate membandingkan model objek yang dibuatnya berdasarkan pembacaan kelas beranotasi atau pemetaan XML HBM Anda dan akan mencoba menyesuaikan skema dengan cepat.The
update
operasi misalnya akan mencoba untuk menambahkan kolom baru, kendala, dll tapi tidak akan pernah menghapus kolom atau kendala yang mungkin telah ada sebelumnya tetapi tidak lagi melakukan sebagai bagian dari model objek dari run sebelumnya.Biasanya dalam skenario kasus pengujian, Anda kemungkinan akan menggunakan
create-drop
sehingga Anda membuat skema, kasus pengujian Anda menambahkan beberapa data tiruan, Anda menjalankan pengujian, dan kemudian selama pembersihan kasus pengujian, objek skema dihapus, meninggalkan database kosong.Dalam pengembangan, sering kali terlihat developer menggunakan
update
untuk mengubah skema secara otomatis untuk menambahkan tambahan baru saat memulai ulang. Tapi sekali lagi mengerti, ini tidak menghapus kolom atau batasan yang mungkin ada dari eksekusi sebelumnya yang tidak lagi diperlukan.Dalam produksi, sering kali Anda sangat disarankan untuk menggunakan
none
atau tidak menentukan properti ini. Itu karena praktik umum bagi DBA untuk meninjau skrip migrasi untuk perubahan database, terutama jika database Anda dibagikan ke beberapa layanan dan aplikasi.sumber
validate
di Production Env?validate
dalam produksi, tetapi biasanya itu harus menjadi pengaturan yang Anda gunakan dalam kualitas / lingkungan pengujian untuk memverifikasi bahwa skrip database yang telah Anda tulis atau terapkan ke alat migrasi database Anda akurat. Alasan lain untuk tidak menggunakanvalidate
dalam produksi adalah karena hal ini bisa menjadi hambatan selama proses startup aplikasi Anda, terutama jika model objek Anda berukuran cukup luas atau jika faktor terkait jaringan lainnya ikut bermain.order
adalah bahwa hal itu ditafsirkan secara tidak benar oleh parser SQL karena itu adalah kata kunci jika tidak di-escape.