



При работе с нашими веб-приложениями мы обычно заранее решаем, какие объекты / поля потребуются на страницах представления, и перед отправкой в представление проверяем, что все объекты должным образом инициализированы из модели.
Это можно сделать (как минимум) тремя способами:
FetchMode.JOIN, если вы используете API критериев)Hibernate.initialize(property))О недостатках OpenSessionInView, вы проверяли страницу это?
Обычно это лучший способ справиться с проблемой, не принимая глобальное решение об активной выборке; заключается в использовании ключевого слова "выборка" в сочетании с запросом hql.
От http://www.hibernate.org/hib_docs/reference/en/html/queryhql-joins.html
Кроме того, соединение «выборка» позволяет инициализировать ассоциации или коллекции значений вместе с их родительскими объектами с помощью единственного выбора. Это особенно полезно в случае коллекции. Он эффективно переопределяет внешнее соединение и ленивые объявления файла сопоставления для ассоциаций и коллекций. См. Раздел 19.1, «Стратегии выборки» для получения дополнительной информации.
от кота как кота внутреннее соединение fetch cat.mate левый присоединиться получить кот. котят
Переключитесь на JBoss Seam.
Фреймворк Seam хорошо спроектирован ребятами, которые разработали Hibernate.
Даже с открытым сеансом в просмотре у вас могут возникнуть некоторые проблемы. В зависимости от сложности вашего веб-приложения Open Session In View не обрабатывает все случаи. У меня также были проблемы с отображением данных (в пользовательском интерфейсе) в качестве выборки объектов во время кварцевого задания, такого как отправка электронного письма.
Hibernate уже интеллектуально извлекает данные, изменение режима выборки приведет к снижению производительности. Более того, вы уходите от условностей и засоряете свой проект посторонними деталями конфигурации.
Уолтер
В руководствах Oracle Java указывается, что «корпоративные компоненты поддерживают транзакции, механизмы, управляющие одновременным доступом к разделяемым объектам». Итак, чтобы справиться с проблемами отложенной выборки, я создаю сессионный компонент Java без сохранения состояния, а затем получаю все необходимые подклассы, прежде чем вернуться из метода. Oracle также называет это базовым шаблоном J2EE "Session Façade". Эти практики кажутся намного лучшими практиками применения, чем некоторые из упомянутых выше.
Hibernate 4.1.6 решает эту проблему: stackoverflow.com/questions/578433/…