Dialek umum:OracleDialect, PostgreSQLDialect, SQLServerDialect, dll.
Gunakan Kriteria ketika pembuatan kueri runtime atau pemfilteran kompleks diperlukan.
Hibernate 6 sepenuhnya mencakup Jakarta EE, memungkinkan migrasi lebih lancar dan tahan terhadap masa depan.
Pemuatan lambat menunda pengambilan entitas terkait hingga entitas tersebut diakses secara eksplisit, sehingga mengurangi biaya kueri awal.
Cascade menyebarkan operasi CRUD dari entitas induk ke entitas terkaitnya.
Anotasi JPA mendeskripsikan pengaitan secara langsung di kelas entitas.
Anotasi menghilangkan konfigurasi XML, sehingga meningkatkan keterbacaan dan pemeliharaan.
| Metode | Deskripsi | Kembali | Diperlukan Transaksi |
| simpan() | Segera menyisipkan; mengembalikan pengenal yang dihasilkan | Dapat diserialkan | Opsional |
| bertahan() | Mendaftarkan entitas; tidak ada pengenal sampai flush | batal | Wajib |
| simpanOrUpdate() | Masukkan jika baru, perbarui jika sudah ada | batal | Wajib |
Lebih suka persist() dalam konteks JPA murni; gunakan saveOrUpdate() saat bekerja di versi Hibernate.
25) Bagaimana Hibernate menangani kunci primer komposit?
Kunci komposit direpresentasikan dengan @Embeddable dan @EmbeddedId anotasi.
@Embeddable
public class EmployeeId implements Serializable {
private int empId;
private String departmentId;
}
@Entity
public class Employee {
@EmbeddedId
private EmployeeId id;
}
Berguna untuk skema lama atau kombinasi kunci alami.
26) Apa yang dimaksud dengan masalah pemilihan N+1 di Hibernate dan bagaimana cara menghindarinya?
Masalah N+1 muncul ketika kueri mengambil entitas induk dan kemudian memicu N kueri tambahan untuk setiap turunan.
- Solusi 1:
JOIN FETCH di HQL.
- Solusi 2:Pengambilan batch (setel
hibernate.default_batch_fetch_size ).
- Solusi 3:Cache tingkat kedua untuk kueri berulang.
Contoh:SELECT d FROM Department d JOIN FETCH d.employees;
27) Apa peran hibernate.cfg.xml berkas?
File XML ini memusatkan konfigurasi:pengaturan JDBC, dialek, pemetaan, cache, dan opsi transaksi.
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping class="com.example.Employee"/>
</session-factory>
</hibernate-configuration>
Proyek modern sering kali menggantikan atau melengkapinya dengan anotasi atau konfigurasi terprogram.
28) Bagaimana cara menerapkan penomoran halaman di Hibernate?
Penomoran halaman membatasi kumpulan hasil, sehingga mengurangi konsumsi memori.
Query query = session.createQuery("from Employee");
query.setFirstResult(10); // skip first 10
query.setMaxResults(20); // fetch next 20
List<Employee> list = query.list();
Efektif untuk REST API dan tabel data besar.
29) Bagaimana Hibernate mengelola konkurensi dan pembuatan versi?
Hibernasi menggunakan penguncian optimis dengan @Version anotasi. Setiap pembaruan menambah kolom versi, dan pembaruan yang bertentangan meningkatkan OptimisticLockException .
@Version
@Column(name="version")
private int version;
Untuk skenario perselisihan tinggi, penguncian pesimis dapat diterapkan dengan LockMode.PESSIMISTIC_WRITE .
30) Apa saja skenario kasus wawancara Hibernate yang umum dan bagaimana Anda menanganinya?
- LazyInitializationException setelah sesi ditutup – gunakan Sesi Terbuka dalam Tampilan atau pengambilan cepat.
- Sisipan duplikat untuk entitas terpisah – lebih memilih
merge() lebih dari update() .
- Kueri berlebihan mengganggu kinerja – mengaktifkan caching, pengambilan batch, atau menulis ulang gabungan HQL.
- Konflik pembaruan serentak – menerapkan penguncian optimis dengan
@Version atau beralih ke kunci pesimis.
Skenario ini menggambarkan pemecahan masalah praktis, yang merupakan keterampilan utama bagi developer dan arsitek senior.
🔍 Pertanyaan Wawancara Hibernasi Teratas dengan Skenario Dunia Nyata &Respons Strategis
Di bawah ini sepuluh pertanyaan realistis yang mencakup aspek pengetahuan, perilaku, dan situasional. Masing-masing menyertakan harapan pewawancara dan contoh jawaban singkat.
1) Apa itu Hibernate dan mengapa digunakan dalam aplikasi perusahaan?
Harapan: Penjelasan yang jelas tentang tujuan, manfaat, dan kasus penggunaan umum.
Contoh jawaban: Hibernate adalah ORM yang mengabstraksi SQL, memungkinkan pengembang untuk bekerja dengan objek Java sambil menangani persistensi, caching, dan manajemen transaksi. Teknologi ini mengurangi boilerplate, meningkatkan portabilitas, dan meningkatkan kinerja dalam sistem skala besar.
2) Bisakah Anda menjelaskan perbedaan antara get() dan load() di Hibernasi?
Harapan: Pemahaman tentang mekanisme pengambilan dan perilaku proxy.
Contoh jawaban: get() segera menanyakan database dan mengembalikan null jika tidak ada catatan. load() mengembalikan proxy, menunda kueri hingga entitas diakses dan membuang ObjectNotFoundException jika hilang.
3) Jelaskan situasi menantang yang Anda temui dengan Hibernate dan cara Anda mengatasinya.
Harapan: Menunjukkan keterampilan pemecahan masalah, debugging, dan pengoptimalan.
Contoh jawaban: Saya mengatasi kemacetan pemilihan N+1 dengan mengganti pengambilan koleksi dengan JOIN FETCH dan mengonfigurasi pengambilan batch. Hal ini memangkas jumlah kueri dari 101 menjadi 3 dan meningkatkan waktu respons sebesar 70%.
4) Bagaimana Anda menangani pengecualian pemuatan lambat di Hibernate?
Harapan: Kesadaran akan siklus hidup sesi dan strategi mitigasi.
Contoh jawaban: Saya mempertahankan sesi terbuka selama rendering tampilan atau menggunakan Sesi Terbuka di Tampilan. Untuk pengaitan kritis, saya beralih ke pengambilan cepat atau menggunakan proyeksi DTO untuk menghindari kesalahan inisialisasi yang lambat.
5) Strategi caching apa yang didukung Hibernate?
Harapan: Pengetahuan tentang cache tingkat pertama, kedua, dan kueri.
Contoh jawaban: Hibernate menyediakan cache tingkat pertama wajib per sesi dan cache tingkat kedua opsional (Ehcache, Infinispan). Cache kueri berfungsi bersama cache tingkat kedua untuk menyimpan kumpulan hasil untuk kueri berulang.
6) Ceritakan saat Anda berkolaborasi dengan tim untuk memecahkan masalah lapisan persistensi.
Harapan: Menunjukkan komunikasi dan kerja tim.
Contoh jawaban: Saya bekerja dengan tim backend dan DBA untuk mengidentifikasi kueri yang lambat melalui log Hibernate, memfaktorkan ulang HQL, dan menambahkan indeks pada kolom yang sering dikueri, sehingga mengurangi latensi sebesar 55%.
7) Bagaimana Anda mendesain pemetaan Hibernasi untuk model domain kompleks dengan banyak hubungan?
Harapan: Kemampuan untuk memetakan kardinalitas, kepemilikan, cascading, dan pengambilan.
Contoh jawaban: Saya menganalisis domain untuk menentukan hubungan satu-ke-banyak, banyak-ke-banyak, dan satu-ke-satu, beri anotasi dengan @OneToMany atau @ManyToMany , dan menyetel mode berjenjang dan mengambil berdasarkan kebutuhan bisnis.
8) Langkah apa yang akan Anda ambil jika Hibernate menghasilkan SQL yang tidak efisien dalam produksi?
Harapan: Pola pikir pemecahan masalah kinerja.
Contoh jawaban: Aktifkan logging SQL, tinjau kueri yang dihasilkan, sesuaikan jenis pengambilan, refaktorisasi HQL, atau masukkan petunjuk kueri. Dalam kasus kritis, saya menggunakan SQL asli untuk operasi tertentu.
9) Bagaimana Anda memastikan integritas dan konsistensi data dalam aplikasi Hibernate transaksional?
Harapan: Pengetahuan manajemen transaksi dan kontrol konkurensi.
Contoh jawaban: Saya menggunakan @Transactional deklaratif batasan, penguncian optimis dengan @Version , dan pengaturan propagasi yang tepat untuk menjaga konsistensi di seluruh transaksi terdistribusi.
10) Jelaskan proyek di mana Hibernate memainkan peran penting dan bagaimana Anda memastikan keberhasilannya.
Harapan: Dampak dan kepemilikan di dunia nyata.
Contoh jawaban: Dalam sistem pemrosesan pesanan yang besar, saya merancang pemetaan entitas yang efisien, mengimplementasikan caching, dan membuat lapisan DAO yang dapat digunakan kembali, sehingga menghasilkan pengurangan beban database sebesar 40% dan siklus penerapan yang lebih lancar.