2012-04-25 2 views
1

Примечание: Этот вопрос относится к моим previous one.Как повторно инициализировать сеанс в Hibernate с контекстом потока?

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

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

ответ

0

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

Смежные вопросы