@Transactional仅适用于DAO,不在服务中(没有Hibernate会话绑定到线程)

时间:2016-05-06 11:16:08

标签: java spring hibernate transactional

我有一个调用DAO方法的服务方法。服务方法注释为@Transactional,DAO方法不注明。在运行时发生以下错误:

No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

当我制作DAO方法@Transactional时,它也能正常工作。

如何在不触及DAO的情况下解决此问题? (大多数方法都是超级DAO,我无法访问。)

我正在使用hibernate-core-3.6.8spring-orm-4.1.6.RELEASE

DAO注释为@Repository,服务注释为@Service

我的applicationContext.xml看起来像这样(我刚刚提供了重要的部分 - 如果您需要更多,请告诉我):

<bean id="contextApplicationContextProvider" class="at.spardat.deploysolution.process.context.ApplicationContextProvider"/>

    <tx:annotation-driven/>

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

    <util:properties id="hibernateProperties" location="classpath:hibernate.properties"/>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
        p:dataSource-ref="dataSource" p:hibernateProperties-ref="hibernateProperties">
        <qualifier value="default"/>
        <property name="mappingLocations">
            <list>
                <value>classpath:....hbm.xml</value>
            </list>
        </property>
        <property name="lobHandler" ref="defaultLobHandler"/>
    </bean>

    <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true"/>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
        p:sessionFactory-ref="sessionFactory"/>

    <bean id="dataFieldMaxValueIncrementer" class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer"
        p:dataSource-ref="dataSource" p:incrementerName="TB_OID_SEQUENCE" p:columnName="OID_VALUE">
        <qualifier value="default"/>
 </bean>

1 个答案:

答案 0 :(得分:0)

你能改变吗?

的hibernate.current_session_context_class = <强>螺纹

在你的hibernate属性文件中

由于