Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstawianie wsadowe przy użyciu Native SQL w Hibernate

Hibernate ma funkcję Batch. Ale w powyższym przypadku używam Native SQL, zgodnie z moją obserwacją, hibernacja nie jest zbyt skuteczna w przypadku Native SQL. Tak, z pewnością pozwala uniknąć błędu braku pamięci, ale nie poprawia znacznie wydajności. Wycofałem się do zaimplementowanego JDBC Batch w Hibernate. Hibernate udostępnia metodę doWork() aby uzyskać połączenie z sesji hibernacji.

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();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodawać adnotacje do pola autoinkrementacji MYSQL za pomocą adnotacji JPA?

  2. Dlaczego zmiana nazwy kolumny w mysql zajmuje tak dużo czasu?

  3. Jak zaktualizować mysql za pomocą Pythona, gdzie pola i wpisy pochodzą ze słownika?

  4. MySQL INSERT INTO z podwójnym warunkiem dla JEŚLI NIE ISTNIEJE

  5. jak porównać datę i godzinę w php/ mysql