我在尝试使用 Spring 的 JdbcTemplate 中的 batchUpdate 时遇到问题。
问题是我想执行两个 SQL 操作:一个 DELETE 方法(清除我的表),然后一个 INSERT 方法。我第一次拨打电话(来自jsp)时它工作正常。但是从第二次尝试开始,当我尝试调用时,没有调用或执行 DELETE 过程,只是 INSERT 过程,导致唯一约束异常。
首先我尝试了这个:
public class MyTableDAOStoredProcedure extends JdbcDaoSupport implements MyTableDAO {
...
....
public void insert(final List<MyObject> myObjectList) {
...
String deleteSql = "DELETE FROM ......";
String insertSql = "INSERT INTO ......";
// Delete Procedure
jdbcTemplate.execute(deleteSql);
//Insert Procedure
jdbcTemplate.batchUpdate(insertSql, new BatchPreparedStatementSetter() {
@Override
public int getBatchSize() {
return myObjectList.size();
}
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
MyObject object = myObjectList.get(i);
ps.setString(1, myObject.getA());
ps.setInt(2, myObject.getB());
}
});
}
}
然后我尝试了这个:
public class MyTableDAOStoredProcedure extends JdbcDaoSupport implements MyTableDAO {
...
...
String deleteSql = "DELETE FROM MY OBJECT";
String insertsql = "INSERT INTO MY_OBJECT values(1,2)";
jdbcTemplate.batchUpdate(new String[] { deleteSql, insertSql});
}
我认为这可能是一些 Spring Transaction 问题。这是我在applicationContext.xml上的 DAO 程序的配置,非常简单:
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
.
.
.
<bean id="myTableDAOStoredProcedure" class="....dao.spring.MyTableDAOStoredProcedure">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
有什么想法或建议吗?