使用旧JDBC进行Spring事务管理

时间:2014-06-25 10:42:46

标签: spring-jdbc spring-transactions

我正在尝试将Spring Transaction Management注入遗留的JDBC代码。但它在事务管理中失败。

我的Spring.xml

<tx:annotation-driven proxy-target-class="true"
    transaction-manager="transactionManager" />

              

<bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@sbsvmlx101.suntecsbs.com:1521:orcl11g" />
    <property name="username" value="XLRT2_TEST_MAIN" />
    <property name="password" value="XLRT2_TEST_MAIN" />
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

并使用@Transactional注释我的服务方法。

@Transactional  
public void createEmp(Employee employee, DataSourceTransactionManager dataSourceTransactionManager)throws Exception {  
    generaldao.createEmployee(employee,dataSourceTransactionManager);  
}  

我正在尝试将数据插入两个不同的表中。第一个成功插入,并且明知我在第二次插入时出错,期望两次插入都不会发生。 但令人惊讶的是,第一次插入已经提交,第二次显示oracle错误。

DAO

con = DataSourceUtils.doGetConnection(dataSource);
        con.setAutoCommit(false);
        insert = con.prepareStatement
                    ("insert into emp500 values(?,?,?)");
         insert.setInt(1, 1);
         insert.setString(2, "test");
         insert.setString(3, "data");
         insert.execute();

         insertdept = con.prepareStatement
                        ("insert into department values(?,?)");
         insertdept.setInt(1, 2);
         insertdept.setString(2, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); //too large value for the column
         insertdept.execute();

请建议。

先谢谢

0 个答案:

没有答案