No Hibernate Session bound to thread, and configuration does not allow creat
问题描述:没有将session绑定到当前线程,网上查找原因:是没有配置事务导致
<!-- transactionManager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- hibernate Transaction -->
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="HDAO" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.changan.common.dao.IHibernateDAO</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
<value>HDAOTarget</value>
</list>
</property>
</bean>
这是本地事务的配置方式,提示不好用以后换了好几种事务配置,手动的均无法成功。最后加成自动配置,
<!-- 配置声明式事务管理(采用注解的方式) -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
对应的数据库操作加
@Override
@Transactional
public void add(User user) {
// session=sessionFactory.openSession();
// Transaction transaction= this.session.beginTransaction();
sessionFactory.getCurrentSession().save(user);
// session.flush();
// transaction.commit();
// session.close();
}
后可以成功解决。
补充:本地配置aop代理没错,只是创建action,service时需手动代理
<bean id="userManager" parent="baseTransactionProxy">
<property name="target">
<ref local="userManagerTarget" />
</property>
</bean>
<bean id="userManagerTarget"
class="service.UserManagerImpl">
<property name="bd">
<ref bean="userDaoAgency" />
</property>
</bean>
<bean id="hello" class="action.HelloWorld" scope="prototype">
<property name="um" ref="userManager"></property>
</bean>