हाइबरनेट में बैच कार्यक्षमता होती है। लेकिन उपरोक्त मामले में मैं मूल एसक्यूएल का उपयोग कर रहा हूं, मेरे अवलोकन के अनुसार हाइबरनेट बैच मूल एसक्यूएल के मामले में ज्यादा प्रभावी नहीं है। हां, निश्चित रूप से यह स्मृति त्रुटि से बचा जाता है लेकिन ज्यादा प्रदर्शन में सुधार नहीं करता है। इसलिए मैं हाइबरनेट में JDBC बैच को लागू करने के लिए पीछे हट गया। हाइबरनेट विधि प्रदान करता है doWork()
हाइबरनेट सत्र से कनेक्शन प्राप्त करने के लिए।
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//get Connction from Session
session.doWork(new Work() {
@Override
public void execute(Connection conn) throws SQLException {
PreparedStatement pstmt = null;
try{
String sqlInsert = "insert into sampletbl (name) values (?) ";
pstmt = conn.prepareStatement(sqlInsert );
int i=0;
for(String name : list){
pstmt .setString(1, name);
pstmt .addBatch();
//20 : JDBC batch size
if ( i % 20 == 0 ) {
pstmt .executeBatch();
}
i++;
}
pstmt .executeBatch();
}
finally{
pstmt .close();
}
}
});
tx.commit();
session.close();