Загрузка социального графа в Spring / Hibernate - продолжительность сеанса Hibernate - PullRequest
1 голос
/ 08 марта 2012

Мое приложение использует социальный график.Каждый объект person имеет список «многие ко многим» других людей, с которыми он связан.Я считаю, что при использовании @ManyToMany (fetch = FetchType.LAZY) мой список не будет просматриваться до тех пор, пока я не выполню операцию с коллекцией.

Мой главный вопрос: если я смотрютаким образом связать человека и затем связать его с долгоживущим сеансом HTTP (например, session.setAttribute («пользователь», человек)), что именно будет сохранено?Если я попытаюсь получить доступ к человеку на графике пользователя через объект, связанный с сеансом, будет ли Hibernate barf из-за того, что сеанс Hibernate истек?

Вероятно, причина этого в том, что я действительно не понимаю, когда HibernateСессия начинается и заканчивается в Spring MVC, поэтому, если кто-то захочет помочь объяснить это, это будет действительно потрясающе (использование @Transactional на уровне обслуживания и getHibernateTemplate на уровне DAO)

Спасибо.

1 Ответ

0 голосов
/ 08 марта 2012

Обычно сеанс Hibernate начинается и заканчивается в запросе.

Если вы сохраняете объект Person в сеансе, будет сохранен только объект, сеанс Hibernate завершится.

Даже если бы это было так, идея связать сеанс Hibernate с сеансом была бы очень плохой идеей, потому что:

  • Под сеансом находится соединение JDBC, поэтому вам нужно будет держать отдельное соединение JDBC открытым для каждого сеанса HTTP (для каждого пользователя), что очень быстро приведет к ограничению ресурсов.

Я думаю, вам лучше использовать шаблон Open Session in View и OpenSessionInViewInterceptor . Таким образом, ваши ассоциации будут загружаться лениво по мере необходимости, но вы не будете держать много открытых соединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...