Какое оптимальное решение для обработки ленивых загружаемых объектов в приложении Spring MVC? Я уже сделал несколько поисков по этой теме, и я нашел следующие решения:Lazy load handling (Hibernate + Spring MVC)
Открыть сеанс в поле зрения: открыть сеанс для каждого запроса и закрыть его после просмотра рендеринга. Проблема с этим решением заключается в том, что мне нужны ленивые объекты загрузки также вне модели Spring MVC (например, пример Junit). Другая обсуждаемая проблема с этим решением - обработка исключений. Что делать, если транзакция генерирует исключение во время рендеринга представления?
Открыть сеанс явно: открыть сеанс явно всякий раз, когда мне нужна ленивая загрузка объекта. На самом деле это решение должно работать, но я не думаю, что это правильный путь.
Использование АОП: создает аспект, который обертывает ленивый метод загрузки в сеансе. Это может быть решение, но я не знаю, на каком уровне моего приложения я должен определить poitcuts
Создание пользовательских запросов: создавать запросы для ленивой загрузки и запросов для активной загрузки. Это решение действительно работает, но мне кажется неправильным применением ленивого шаблона загрузки
проверить это сообщение на OSIV-плюсах/минусах http://blog.jhades.org/open-session-in-view-pattern-pros-and-cons/ –
Проблема с использованием пользовательских запросов заключается в том, что они принудительно присоединяют на связанный объект, что не всегда является оптимальным решением. Иногда его более эффективно иметь 1 запрос для основного объекта и N отдельных запросов для связанных объектов. – Solubris
Кроме того, приятно отделить запрос от ленивой загрузки, так как это означает, что у вас может быть один метод для ленивой загрузки (например: loadRelationsRequiredByDefault()), который может быть повторно использован многими различными запросами, возвращающими один и тот же объект (или список объекты). – Solubris