我正在尝试将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();
请建议。
先谢谢