IKUTI
Saat menggunakan JOIN
terhadap asosiasi entitas, JPA akan menghasilkan JOIN antara entitas induk dan tabel entitas anak dalam pernyataan SQL yang dihasilkan.
Jadi, ambil contoh Anda, saat menjalankan permintaan JPQL ini:
FROM Employee emp
JOIN emp.department dep
Hibernate akan menghasilkan pernyataan SQL berikut:
SELECT emp.*
FROM employee emp
JOIN department dep ON emp.department_id = dep.id
Perhatikan bahwa SELECT
klausa SQL hanya berisi employee
kolom tabel, dan bukan department
yang. Untuk mengambil department
kolom tabel, kita harus menggunakan JOIN FETCH
alih-alih JOIN
.
BERGABUNG FETCH
Jadi, dibandingkan dengan JOIN
, JOIN FETCH
memungkinkan Anda untuk memproyeksikan kolom tabel bergabung dalam SELECT
klausa pernyataan SQL yang dihasilkan.
Jadi, dalam contoh Anda, saat menjalankan permintaan JPQL ini:
FROM Employee emp
JOIN FETCH emp.department dep
Hibernate akan menghasilkan pernyataan SQL berikut:
SELECT emp.*, dept.*
FROM employee emp
JOIN department dep ON emp.department_id = dep.id
Perhatikan bahwa, kali ini, department
kolom tabel juga dipilih, bukan hanya yang terkait dengan entitas yang tercantum dalam FROM
klausa JPQL.
Juga, JOIN FETCH
merupakan cara yang bagus untuk mengatasi LazyInitializationException
ketika menggunakan Hibernate karena Anda dapat menginisialisasi asosiasi entitas menggunakan FetchType.LAZY
strategi pengambilan bersama dengan entitas utama yang Anda ambil.