我正在使用Spring声明式事务管理。它仅在完成方法的执行后才提交事务。在Oracle DB中更新超过两万条记录的大型数据集时,我遇到了异常
11:16:44,901 ERROR [STDERR]
Caused by: javax.transaction.RollbackException:
Transaction TransactionImple < ac,
BasicAction: a0002ba:b7d:4f602e7f:80
status: ActionStatus.ABORTING > cannot proceed STATUS_ROLLING_BACK
11:16:44,901 ERROR [STDERR] at org.jboss.resource.connectionmanager.TxConnectionManager.checkTransactionActive(TxConnectionManager.java:332)
11:16:44,901 ERROR [STDERR] at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.checkTransactionActive(BaseConnectionManager2.java:972)
11:16:44,901 ERROR [STDERR] at org.jboss.resource.adapter.jdbc.WrapperDataSource.checkTransactionActive(WrapperDataSource.java:161)
11:16:44,901 ERROR [STDERR] ... 144 more
如果我使用普通JDBC使用批处理来更新这么大的数据集,那么我将失去事务(ACID)属性的好处。但是我在使用Spring事务管理更新这个大型数据集时遇到了问题。有没有人遇到类似的问题或者可以建议一些替代解决方案?
我正在使用JTATransactionManager和Jboss 5.1以及Spring + iBatis集成。