powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / [Hibernate] стратегия работы с Session
12 сообщений из 12, страница 1 из 1
[Hibernate] стратегия работы с Session
    #33826544
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Практически во всех примерах вижу, что обычно время жизни сессии
очень короткое. В пределах одного try-catch Открыли сессию, открыли транзакцию, чего-то поделали, закрыли транзакцию, закрыли сессию.
Это все хорошо, но не работает при использовании lazy initialization.
А как быть в реальном приложении? Хранить глобальную сессию и всегда ее использовать? Что-то не нравится. А как быть?
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33826741
BlackWall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовать шаблон OpenSessionInView (OpenSessionInViewFilter или OpenSessionInViewInterceptor) в случае использования Spring. Или можно, в принципе, сделать свое по аналогии в Filter.
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33826760
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расскажите, пожалуйста, поподробнее. (Spring не использую - маленький ишшо :) )
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33826836
Если работаешь с сервлетами (или struts), то пишешь фильтр, который открывает сессию перед выполнением сервлета и закрывает после.

Вместо фильтра можно использовать всяко разные interseptor'ы имеющиеся в спринг/стратс.
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33826902
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложение - десктоп
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33826960
AciD_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerПриложение - десктоп
А почему не нравиться держать одну открытую сессию в течение выполнения приложения? (приложение все-таки десктопное).
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33827088
Петушок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AciD_v fixxerПриложение - десктоп
А почему не нравиться держать одну открытую сессию в течение выполнения приложения? (приложение все-таки десктопное).

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

В десктопном приложении управление сессиями/транзакциями зависит от принятых ахитектурных решений.

Если всё намешано в одну кучу (логика, представление, доступ к данным), то будет тяжело.
А если есть выделенные бизнес транзакции, то можно открывать и закрывать сессию одновременно с такой траназкцией и будет щастье.
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33827190
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПетруччииоЕсли работаешь с сервлетами (или struts), то пишешь фильтр, который открывает сессию перед выполнением сервлета и закрывает после.
Даже на вебе имхо это не всегда спасает... Порой приходится выкручиваться с чтением полей с lazy-initialization в рамках нескольких request'ов. Вот еще: Open Session in View
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33829071
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петушок
Потому что сессия кэширует все объекты, доставаемые из базы и нужно либо регулярно их оттуда выкидывать, либо пересоздавать сессию.


Это заблуждение, сессионный кэш или кэш первого уровня кэширует объекты только одной транзакции. см http://www.hibernate.org/hib_docs/v3/reference/en/html/performance.html#performance-cache
Возможно, у вас включен кэш второго уровня?

По теме вопроса
Наиболее идеологически верный подход работы с сессией в hibernate сегодня - это стратегия одна сессия - одна транзакция. Для борьбы же с lazy initialization советую придерживаться правила, что за пределы business tier'а должны попадать только полностью инициализированные объекты. Вообще, старайтесь делать ваш граф объектов проще, используя для этого меньше navigable (в терминах UML) связей.
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33829466
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно поподробнее про navigable?
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33835742
Петушок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuri Петушок
Потому что сессия кэширует все объекты, доставаемые из базы и нужно либо регулярно их оттуда выкидывать, либо пересоздавать сессию.


Это заблуждение, сессионный кэш или кэш первого уровня кэширует объекты только одной транзакции. см http://www.hibernate.org/hib_docs/v3/reference/en/html/performance.html#performance-cache
Возможно, у вас включен кэш второго уровня?


hibernate in action
The Session caches every object that is in persistent state (watched and checked for dirty state by Hibernate).
This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long
time or simply load too much data. One solution for this is to call clear() and evict() to manage the Session
cache, but you most likely should consider a Stored Procedure if you need mass data operations.



funikovyuri
По теме вопроса
Наиболее идеологически верный подход работы с сессией в hibernate сегодня - это стратегия одна сессия - одна транзакция. Для борьбы же с lazy initialization советую придерживаться правила, что за пределы business tier'а должны попадать только полностью инициализированные объекты. Вообще, старайтесь делать ваш граф объектов проще, используя для этого меньше navigable (в терминах UML) связей.

А как же концепция Unit of work и бизнес транзакции, которые могут состоять более чем из одной системной транзакции?
...
Рейтинг: 0 / 0
[Hibernate] стратегия работы с Session
    #33835754
Петушок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петушок hibernate in action



т.е. hibernate_references, 12.1.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / [Hibernate] стратегия работы с Session
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]