受け入れられた答えは、バッチ操作を処理するための推奨される方法ではありません。セッションを開くときにバッチエグゼキュータモードを使用する必要があるため、実際のバッチステートメントは表示されません。コード寄稿者がバッチ更新(または挿入)の適切な方法は、バッチモードでセッションを開き、単一のレコードに対して更新(または挿入)を繰り返し呼び出すことであると推奨したこの投稿を参照してください。
これが私のために働くものです:
public void updateRecords(final List<GisObject> objectsToUpdate) {
final SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession(ExecutorType.BATCH);
try {
final GisObjectMapper mapper = sqlSession.getMapper(GisObjectMapper.class);
for (final GisObject gisObject : objectsToUpdate) {
mapper.updateRecord(gisObject);
}
sqlSession.commit();
} finally {
sqlSession.close();
}
}
更新/挿入でforeachを使用しないでください。また、単一のレコードのみを更新/挿入するようにしてください。受け入れられた答え(無効な文字、ステートメントが終了していないなど)に従って実行することにより、解決できないOracleエラーが発生していました。リンクされた投稿が示すように、受け入れられた回答に示されている更新(または挿入)は、実際には単なる巨大なSQLステートメントです。