Как повторно инициализировать сеанс в Hibernate с контекстом потока?

Примечание. Этот вопрос связан с моим предыдущим.

Я использую hibernate.current_session_context_class=thread в своей конфигурации Hibernate и получаю сеансы Hibernate через SessionFactory.getCurrentSession() по мере необходимости. Таким образом, он создает или дает мне существующие сеансы, когда это необходимо, поэтому я не забочусь об этом.

Это все здорово, но что делать, когда я получаю, например, HibernateException, ConstraintViolationException? Затем текущий сеанс, который я получил ранее, становится недействительным, и я больше не могу его использовать, даже для чтения некоторых дополнительных данных (согласно многим форумам, которые я читал). Как я могу отказаться и получить новый сеанс в определенной области? Я думаю, что вызов SessionFactory.getCurrentSession() во второй раз все равно вернет мне ту же недействительную сессию!?


person Laimoncijus    schedule 25.04.2012    source источник


Ответы (1)


Для ThreadLocalSessionContext сессия будет закрыта, когда транзакция завершится. Так что в этом случае вы должны позвонить tx.rollback(), затем sessionFactory.getCurrentSession(), чтобы начать заново.

person sharakan    schedule 26.04.2012