spring整合hibernate时报的错

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值