Описание тега open-session-in-view

Открытый сеанс в представлении (OSIV) - это шаблон, в котором контекст постоянства (сеанс) открыт и доступен на уровне представления и закрывается в конце HTTP-запроса.

Открытый сеанс в представлении (OSIV) - это шаблон, в котором контекст постоянства (сеанс) открыт и доступен на уровне представления и закрывается в конце HTTP-запроса. Этот шаблон стал заметным в Spring/Hibernate, поэтому появилась возможность перемещаться между сущностями ORM (Hibernate/JPA) для их рендеринга без получения известного "LazyInitializationException" (LIE) из инфраструктуры Hibernate.

Контекст присутствия (сеанс) может быть открыт в начале запроса, но есть решения, как сделать это по запросу - что предпочтительно, если сеанс не всегда необходим.

Плюсы использования OSIV:

  • легко вносить изменения в уровень представления, не изменяя уровень обслуживания / бизнес-логику, если можно перемещаться к информации по объектам (альтернативой является предварительная выборка всего на бизнес-уровне)

Минусы решения:

  • нет четкого разделения ответственности,
  • презентация может лениво извлекать объекты, более низкая производительность (без уровня обслуживания, чтобы даже знать об этом), часто приводит к известной проблеме выбора N+1,
  • обычно транзакция закрывается в конце запроса, что слишком поздно для бизнес-логики для обработки исключений (это можно решить, используя более короткую транзакцию вокруг вызова бизнес-уровня, а не вокруг всего сеанса)