0

Spring の JdbcTemplate から batchUpdate を使用しようとすると問題が発生します。

問題は、2 つの SQL 操作を実行したいということです。DELETE メソッド (テーブルをクリアするため) と INSERT メソッドです。(jspから)初めて呼び出しを行ったときに正常に動作します。しかし、2 回目の試行から呼び出しを実行しようとすると、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 の問題かもしれないと思います。これは、私の DAO プロシージャのapplicationContext.xmlの構成です。非常に単純です。

<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>

アイデアや提案はありますか?

4

0 に答える 0