IKUTI
Saat menggunakan JOINterhadap 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 SELECTklausa SQL hanya berisi employeekolom tabel, dan bukan departmentyang. Untuk mengambil departmentkolom tabel, kita harus menggunakan JOIN FETCHalih-alih JOIN.
BERGABUNG FETCH
Jadi, dibandingkan dengan JOIN, JOIN FETCHmemungkinkan Anda untuk memproyeksikan kolom tabel bergabung dalam SELECTklausa 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, departmentkolom tabel juga dipilih, bukan hanya yang terkait dengan entitas yang tercantum dalam FROMklausa JPQL.
Juga, JOIN FETCHmerupakan cara yang bagus untuk mengatasi LazyInitializationExceptionketika menggunakan Hibernate karena Anda dapat menginisialisasi asosiasi entitas menggunakan FetchType.LAZYstrategi pengambilan bersama dengan entitas utama yang Anda ambil.