Открытая сессия в альтернативном представлении - PullRequest
0 голосов
/ 10 августа 2011

Мы находимся в процессе разработки веб-приложения, используя stuts2 (слой MVC), Spring 3.x (DI, разграничение транзакций, другие важные вещи) и Hibernate 3.x (Постоянство).

Как и любое другое веб-приложение, использующее такую ​​или аналогичную платформу, нужно позаботиться о том, чтобы основная логика действия была завершена, и, следовательно, сеанс Hibernate уже был закрыт, а транзакция базы данных завершилась, что является одной из распространенных проблем мы должны позаботиться, когда получаем исключение: LazyInitializationException: сессия была закрыта.

Существуют различные способы решения этой проблемы, и одним из широко принятых решений является Шаблон открытого сеанса в представлении . Поскольку мы используем пружину, мы можем легко использовать для этого пружину из коробки.

Существует ли другая хорошая альтернатива для этого шаблона, спрашивая это, я не ищу альтернативное решение, но хочу провести сравнительное исследование, какие другие хорошие и одинаково эффективные подходы доступны для решения этой проблемы.

Заранее спасибо Umesh

1 Ответ

1 голос
/ 17 августа 2011

OSIV, кажется, всегда вызывает проблемы у людей.Вот стратегия, которая хорошо сработала для меня:

  1. Все ассоциации Hibernate помечены как LAZY
  2. . Методы DAO get все принимают логическое значение loadChildren;если да, инициализируйте дочерние ассоциации для объекта get'ed
  3. В зависимости от того, нужны ли дочерние ассоциации для конкретного запроса или нет, Контроллер передает loadChildren как T или F сервису и уровню DAO
  4. Доступ к уровню просмотра имеет то, что ему нужно для обхода ассоциаций, не беспокоясь о том, инициализированы они или нет
...