Я задаю этот вопрос, учитывая мои выбранные рамки разработки JPA (реализация Hibernate), Spring и < вставка структуры MVC здесь - Struts 1, Struts 2, Spring MVC, Stripes... > ;.
Я немного думал о связях в моем уровне сущности - например, у меня есть сущность заказа, которая имеет много строк заказа. Я настроил свое приложение так, чтобы он охотно загружал строки заказов для каждого заказа. Считаете ли вы, что это ленивый способ обойти ленивые проблемы с инициализацией, с которыми я столкнулся бы, если бы мне нужно было установить стратегию получения false?
Как я вижу это, у меня есть следующие альтернативы при извлечении сущностей и их ассоциаций:
-
Используйте шаблон Open Session In View для создания сеанса для каждого запроса и фиксации транзакции перед возвратом ответа.
-
Внедрить DTO (объект передачи данных), чтобы каждый выполняемый мной запрос DAO возвращал правильно инициализированный DTO для моих целей. Мне не очень нравится этот вариант, потому что, по моему опыту, я обнаружил, что он создает много кода копирования кода и становится беспорядочным для поддержки.
-
Не сопоставляйте какие-либо ассоциации в JPA, чтобы каждый выполняемый мной запрос возвращал только объекты, которые меня интересуют, - это, вероятно, потребует от меня иметь DTO в любом случае и будет болью для поддержания, и я думаю, что поражения цель иметь ORM в первую очередь.
-
Ищите все (или большинство ассоциаций) - в приведенном выше примере всегда извлекайте все строки порядка, когда я получаю заказ.
Итак, мой вопрос в том, когда и при каких обстоятельствах вы бы использовали какой из этих вариантов? Вы всегда придерживаетесь одного способа сделать это?
Я бы попросил коллегу, но я думаю, что, если бы я даже упомянул термин "Открытая сессия в представлении", меня бы приветствовали пустые взгляды: (Что я действительно ищу здесь, это советы старшего или очень опытного разработчик.
Спасибо, ребята!