В спящем режиме мы будем получать данные различными способами, такими как:
.get()
.load()
Но какой из них лучше с точки зрения производительности?
Основные правила для извлечения данных в Hibernate с точки зрения производительности:
Следование этим правилам требует разных подходов в разных ситуациях.Например:
Используйте get() для извлечения одного объекта по его идентификатору.Сконфигурируйте типы выборки его отношений (ленивый / нетерпеливый) для достижения оптимального баланса между правилами 1 и 2.
get()
Иногда вам нужно получить ссылку на объект, но не нужноПринеси это.Используйте load() в этом случае, чтобы избежать выборки ненужных данных.
load()
Используйте HQL-запросы для выборки нескольких объектов.Настройте стратегию выборки с помощью join fetch для оптимального баланса между правилами 1 и 2.
join fetch
Иногда вам необходимо использовать разные стратегии выборки в разных сценариях, чтобы достичь баланса между правилами 1 и 2,так что настроек типа статической выборки недостаточно.В этом случае используйте HQL-запросы, настроенные для конкретных сценариев, даже при извлечении отдельных объектов.
Также могут помочь профили выборки, введенные в Hibernate 3.5.
Иногда ваша СУБД не можетстроить оптимальные планы запросов для запросов, сгенерированных Hibernate.В этом случае используйте собственный SQL.