स्वीकृत उत्तर बैच संचालन को संभालने का अनुशंसित तरीका नहीं है। यह सही बैच विवरण नहीं दिखाता है क्योंकि सत्र खोलते समय बैच निष्पादक मोड का उपयोग किया जाना चाहिए। यह पोस्ट देखें जिसमें एक कोड योगदानकर्ता ने सिफारिश की थी कि बैच अपडेट (या सम्मिलित) का उचित तरीका बैच मोड में एक सत्र खोलना और एक रिकॉर्ड के लिए बार-बार कॉल अपडेट (या सम्मिलित) करना है।
यहाँ मेरे लिए क्या काम करता है:
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 का उपयोग न करें और सुनिश्चित करें कि यह केवल एक रिकॉर्ड को अपडेट/सम्मिलित करता है। मैं स्वीकृत उत्तर (अमान्य चरित्र, कथन समाप्त नहीं हुआ, आदि) के अनुसार ऐसा करके असफल ओरेकल त्रुटियों में भाग रहा था। जैसा कि लिंक की गई पोस्ट इंगित करती है, स्वीकृत उत्तर में दिखाया गया अद्यतन (या सम्मिलित) वास्तव में केवल एक विशाल sql कथन है।