如何使用CurrentSessionContext / SpringSessionContext和HibernateDaoSupport来拦截对getCurrentSession()的调用

时间:2009-01-12 17:10:40

标签: hibernate spring aop

我在Spring中使用HibernateDaoSupport进行Spring-Hibernate集成。我需要拦截所有getCurrentSession调用并启用过滤器并设置过滤器参数值。

Hibernate支持CurrentSessionContext impls来拦截getCurrentSession调用。 Spring提供了一个名为SpringSessionContext的实现。但是当使用HibernateDaoSupport时,Spring拥有自己的SessionHolder机制,并且getCurrentSession()永远不会被调用,并且拦截永远不会有效。有解决方法吗?

2 个答案:

答案 0 :(得分:1)

听起来你宁愿基于简单的Hibernate 3 API实现你的Spring DAO:

http://static.springframework.org/spring/docs/2.5.x/reference/orm.html#orm-hibernate-straight

答案 1 :(得分:1)

如果您使用的是AnnotationSessionFactoryBean或LocalSessionFactoryBean 那么你还需要设置这个属性:

<property name="exposeTransactionAwareSessionFactory" value="false" />

默认为true,如果为true,则忽略hibernate.current_session_context_class属性。