sql >> データベース >  >> RDS >> Mysql

HibernateでネイティブSQLを使用したバッチ挿入

    Hibernateにはバッチ機能がありますが、上記の場合、ネイティブSQLを使用していますが、私の観察によれば、ネイティブSQLの場合、Hibernateバッチはあまり効果的ではありません。確かに、メモリ不足エラーを回避しますが、パフォーマンスはそれほど向上しません。 HibernateにJDBCバッチを実装するために撤退しました。HibernateはメソッドdoWork()を提供します Hibernateセッションから接続を取得します。

    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. Mtop(MySQL Database Server Monitoring)をRHEL / CentOS 6/5/4、Fedora17-12にインストールします

    2. マテリアライズド・ビューが常に最新であることを確認するにはどうすればよいですか?

    3. PostgreSQLでヒストグラムを作成する方法

    4. SQLiteで重複する行を削除する2つの方法