Hibernate có chức năng Batch.Nhưng trong trường hợp trên, tôi đang sử dụng Native SQL, theo quan sát của tôi, loạt hibernate không hiệu quả trong trường hợp Native SQL. Có, chắc chắn nó tránh được lỗi hết bộ nhớ nhưng không cải thiện nhiều hiệu suất. Tôi đã rút lui để triển khai JDBC Batch trong Hibernate. Hibernate cung cấp phương thức doWork()
để có được Kết nối từ Phiên ngủ đông.
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();