mysql - 使用 hibernate @Transactional 插入到表中

标签 mysql spring hibernate spring-mvc transactions

我正在使用 @Transactional 注释来测试通过 Spring 应用程序将一些数据插入到其中一个表中。我的测试成功了,但我没有看到任何数据被插入到表中。

以下是相关的代码片段:

我的测试:

@TransactionConfiguration(transactionManager="MyTxManager")
@Transactional
public class MyTest {
    @Autowired
    private DataProvider provider;

    @Test
    @Transactional
    void testInsert() {
        Order purchaseOrder = new Order("ID1", "LER", "VDR1", 0, );
        provider.addRow(purchaseOrder);
    }

数据提供者:

public class DataProvider extends DatabaseProvider {

    // some stuff...
    @Transactional
    public void insertRow(Order purchaseOrder) {
        /* 
         * SessionFactory is got through autowiring 
         * and is working perfectly fine.
         */
        Session session = sessionFactory.getCurrentSession();

        // This should save the row into the table - which it doesn't :(
        session.save(purchaseOrder);

    }

信息提供者.xml

<bean id="DataProvider" class="com.util.DataProvider">
    <property name="sessionFactory" ref="MySessionFactory" />
</bean>

包含 session 工厂配置的hibernate.xml

 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
      parent="AbstractSessionFactory" depends-on="EnvironmentHelper">
    <property name="hibernateProperties">
      <props>
         <prop key="hibernate.connection.autocommit">true</prop>
         <prop key="hibernate.connection.provider_class">com.hibernate.ConnectionPool</prop>
         <prop key="hibernate.connection.driver_class">${driverClassName}</prop>
         <prop key="hibernate.connection.url">${databaseURL}</prop>
         <prop key="hibernate.connection.username">${databaseUsername}</prop>
         <prop key="hibernate.connection.password">${databasePassword}</prop>

         <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
         <prop key="hibernate.default_schema">${databaseDefaultSchema}</prop>
      </props>
    </property>
</bean>

<!-- Use Spring transactions for Hibernate -->
<tx:annotation-driven transaction-manager="MyTxManager" mode='proxy' proxy-target-class='true'/>

<bean id="MyTxManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory" ref="MySessionFactory" />
</bean>    
</beans>

最佳答案

我认为问题在于回滚事务。看这里defaultRollback方法。 像这样尝试:

@TransactionConfiguration(transactionManager="MyTxManager", defaultRollback=false)

关于mysql - 使用 hibernate @Transactional 插入到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15370206/

相关文章:

mysql - VB.NET:用Mysql数据库部署windows form应用项目可行吗?

php - Customer_id 的订单计数(按类别 no)

mysql - 内连接查询不起作用

java - 如何将 Spring Cloud Config 与 Git 和 Vault 复合环境存储库一起使用?

java - hibernate.cfg.xml 中的 Hibernate connection.url - 处理多个参数

mysql - jdbc4.MySQLSyntaxErrorException : Unknown database

java - 我在哪里可以获得 Spring 3.0 的 petclinic 示例应用程序?

spring - @ComponentScan 必须和@Configuration 放在一起吗? ( Spring 芯)

java - 使用 JPA 在 Spring 中进行事务和回滚

java - HQL 查询中出现意外 token 错误