Jawaban yang diterima bukanlah cara yang disarankan untuk menangani operasi batch. Itu tidak menunjukkan pernyataan batch yang benar karena mode pelaksana batch harus digunakan saat membuka sesi. Lihat posting ini di mana kontributor kode merekomendasikan bahwa cara yang tepat untuk memperbarui (atau menyisipkan) adalah dengan membuka sesi dalam mode batch dan berulang kali memanggil pembaruan (atau menyisipkan) untuk satu catatan.
Inilah yang berhasil untuk saya:
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();
}
}
Jangan gunakan foreach dalam pembaruan/penyisipan Anda dan pastikan bahwa itu hanya memperbarui/menyisipkan satu catatan. Saya mengalami kesalahan Oracle yang tidak dapat diselesaikan dengan melakukannya sesuai dengan jawaban yang diterima (karakter tidak valid, pernyataan tidak berakhir, dll.). Seperti yang ditunjukkan oleh posting tertaut, pembaruan (atau sisipan) yang ditampilkan dalam jawaban yang diterima sebenarnya hanyalah pernyataan sql raksasa.