Похоже, что вы пытаетесь обойти проблему, что ваша продолжительность сеанса неверна. Сессия предназначена для использования в одной единице работы. Вместо того, чтобы очищать сессию таким образом, чтобы продолжать использовать ее, вы должны очистить ее и начать заново с новой. Если вы используете это для ускорения работы приложения из-за кэширования, я предлагаю вам взглянуть на кэширование второго уровня в NHibernate, который работает на уровне SessionFactory
, а не Session
.
Если у вас длительный процесс редактирования с большим пакетным сохранением в конце, то, на мой взгляд, вы должны работать с отключенными объектами. Таким образом, вы используете один сеанс для загрузки объектов и любых связанных с ними объектов, редактируете их вне контекста сеанса, затем в конце процесса заново присоединяете эти объекты к новому сеансу, используя SaveOrUpdate
, а затем очищаете сессия. Такой подход работает лучше всего, если вы используете автономную оптимистическую блокировку для параллельного подхода, используя, например, столбец SQL Server timestamp
или виртуальный столбец Oracle ORA_SCN
в качестве версии. Если объект изменился под вами, то обновление завершится неудачно с StaleObjectStateException
.
Но YMMV, и мне нужно знать больше о вашем заявлении, чтобы сказать что-то более конкретное, чем это.