у цьому посиланні, про яке я згадував у коментарі, читайте цю частину:
Об’єднання "отримання" дозволяє асоціації або колекції значень ініціалізуватися разом із їхніми батьківськими об'єктами за допомогою одного вибору. Це особливо корисно у випадку з колекцією. Це ефективно перекриває зовнішнє об'єднання та ліниві декларації картографічного файлу для асоціацій та колекцій.
це "ПРИЄДНУЙТЕ ФЕТЧ" матиме ефект, якщо ви маєте (fetch = FetchType.LAZY) властивість для колекції всередині сутності (наприклад, нижче).
І це лише ефект методу "коли запит має відбутися". І ви також повинні знати це :
сплячий має два ортогональних поняття: коли відбувається асоціація і як вона виймається. Важливо, щоб ви не переплутали їх. Ми використовуємо функцію для налаштування продуктивності. Ми можемо використовувати ледачий, щоб визначити договір, які дані завжди доступні в будь-якому окремому екземплярі певного класу.
коли вибирається асоціація -> ваш тип "ВИКОНАННЯ"
як це витягнуто -> Приєднатися / вибрати / Підібрати / Пакет
У вашому випадку FETCH матиме ефект лише в тому випадку, якщо у вас є відділ як набір у співробітнику, щось подібне в організації:
@OneToMany(fetch = FetchType.LAZY)
private Set<Department> department;
коли ви використовуєте
FROM Employee emp
JOIN FETCH emp.department dep
ви отримаєте emp
і emp.dep
. коли ви не користуєтеся добутком, ви все одно можете отримати, emp.dep
але сплячий режим обробить інший вибір до бази даних, щоб отримати цей набір відділу.
тож це лише питання налаштування продуктивності, про те, що ви хочете отримати весь результат (вам це потрібно чи ні) в одному запиті (нетерплячий видобуток), або ви хочете запитувати його останнім, коли вам це потрібно (лінивий вибір).
Використовуйте нетерплячий пошук, коли вам потрібно отримати невеликі дані за допомогою одного вибору (один великий запит). Або скористайтеся ледачим пошуком, щоб запитати, що вам потрібно останнім (багато менших запитів).
використовувати fetch, коли:
немає великої непотрібної колекції / набору всередині тієї організації, яку ви збираєтеся отримати
спілкування від сервера додатків до сервера баз даних занадто далеко і потребує тривалого часу
вам може знадобитися , що збір останнього , коли у вас немає доступу до нього ( за межі від транзакційного методу / класу)