小编Wuk*_*ash的帖子

Hibernate Spring Transactional 没有事务正在进行

我正在尝试让 hibernate 与 spring 管理的事务一起工作。无论我做什么,我总是会收到“没有交易正在进行”的异常。我唯一不明白的是:

如果我不调用sessionFactory.getCurrentSession()我的@Transactional方法,一切都会正常,我可以看到HibernateTransactionManager事务生命周期方法被调用 -doGetTransaction(...), doCommit(...)等等,并且不会引发错误。

当我添加sessionFactory.getCurrentSession()我的方法时,我仍然看到doGetTransaction()(显然),但是一旦被getCurrentSession()调用,我就开始看到doRollback(),最后我得到“没有事务正在进行”异常。我已经花了一整天的时间了,希望有人能帮忙。尝试更改事务范围、xml 配置,基本上我能想到的一切。使用最新的 spring 和 hibernate 版本(分别为 4.3.3 和 5.2.3)

applicationContext.xml:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/trainings"/>
    <property name="password" value="xxx"/>
    <property name="username" value="xxx"/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        </props>
    </property>
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager" >
    <property name="sessionFactory" ref="sessionFactory"/>
    <property name="dataSource" ref="dataSource" />
</bean>

<context:annotation-config/>

<context:component-scan …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate transactions spring-transactions

5
推荐指数
1
解决办法
2879
查看次数