Я использую HibernateDaoSupport в Spring для интеграции Spring-Hibernate. Мне нужно перехватить все вызовы getCurrentSession, включить фильтр и установить значение параметра фильтра.
Hibernate поддерживает CurrentSessionContext для перехвата вызовов getCurrentSession. Spring предоставляет реализацию этого под названием SpringSessionContext. Но при использовании HibernateDaoSupport Spring имеет собственный механизм SessionHolder, и getCurrentSession () никогда не вызывается, и перехват никогда не работает. Есть ли обходной путь для этого?





Похоже, вы бы предпочли реализовать свои Spring DAO на основе простого Hibernate 3 API:
http://static.springframework.org/spring/docs/2.5.x/reference/orm.html#orm-hibernate-straight
Вы можете выполнять декларативные транзакции прямо в Hibernate. Я не уверен, что здесь означает «избегает зависших сессий».
Если вы используете AnnotationSessionFactoryBean или LocalSessionFactoryBean то вам также необходимо установить это свойство:
<property name = "exposeTransactionAwareSessionFactory" value = "false" />
По умолчанию true, а свойство hibernate.current_session_context_class игнорируется, если оно истинно.
Spring обеспечивает поддержку синхронизации транзакций в HibernateDaoSupport и избегает зависших сеансов, которым слишком сложно сопротивляться.