我正在尝试让 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)