事务未提交

时间:2021-01-24 06:04:03

标签: spring hibernate transactions jta

从事 Spring 5 和 Hibernate 项目。使用 Spring 进行 bean 管理、事务和 MVC。尽管我可以在日志中看到插入语句,但更改并未提交到数据库。没有错误。 select 语句没有问题。我可以登录应用程序。以下是我的配置:

framework.xml:

    <context:component-scan base-package="com.test" > 
        <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/> 
    </context:component-scan> 
    
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" 
          ref="dataSource"/>
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
        <property name="jtaTransactionManager" ref="transactionManager" />
        
    </bean>
    <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
        <property name="forceShutdown" value="false" />
    </bean>
 
    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.J2eeUserTransaction">
        <property name="transactionTimeout" value="300" />
    </bean>
    
     <!--  
    <bean id="HibernateTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    -->
      
    <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" >
    <property name="transactionManager"><ref bean="atomikosTransactionManager"  /></property>
    <property name="userTransaction"><ref bean="atomikosUserTransaction"  /></property>
    </bean>
     
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false"/>
In the above configuration, i excluded the controllers as they are loaded using a different mvc related config files.

The service classes were annotated with @Transactional.

I tried without JTA with plain HibernateTransactionManager also. The transactions are not getting committed.
The below entry is also for hibernate to use JTA as transaction manager
hibernate.transaction.jta.platform to org.hibernate.engine.transaction.jta.
platform.internal.AtomikosJtaPlatform and  
   hibernate.transaction.coordinator_class to jta
I am using getCurrentSession for getting hibernate session.

I have to use Atomikos as JTA transaction manager as the development has to be happen in servlet container.

预先感谢您帮助查找配置中的差距或任何其他问题..

1 个答案:

答案 0 :(得分:0)

问题出在 maven Jetty 插件上,创建的 db 连接没有用 maven jetty 插件 9.4.35.v20201120 保留 hibernate 5 的更改,尽管它与 hibernate 3 和 maven jetty 插件 7.0.1.v20091125 一起使用.当我在 tomcat 中使用预先配置的数据源部署相同的 war 文件时,能够持久化更改。