1

こんにちは、私は最初にDBテーブルの値をチェックし、存在しない場合は新しい値を生成してDBに挿入するアプリケーションを持っています.このループは約100万回繰り返されます.

私の労働者階級では: -

session=HibernateSessionFactory.getSession();       
    for(----loop 

    i check

    i generate

    then:-

    MyTable myTable=new MyTable();
            myTable.setName("dasdas");
            myTable.setww("ss");
            myTable.setaa("daaasdas");

    hibernateRepositoy.save(dgCcno,session);

}

メソッド i を他のクラスに保存します:-

  public void save(Object obj,Session session)  {       

            Transaction tx = null;
            try {
                tx = session.beginTransaction();
                session.saveOrUpdate(obj);
                session.flush();

                session.clear();
                tx.commit();
            }
            catch (HibernateException e) {
                e.printStackTrace();
                logger.error(e.getMessage(), e);            

                if(tx!=null){
                    tx.rollback();
                }
            } 
            catch (Exception e) {
                e.printStackTrace();

                logger.error(e.getMessage(), e);        

            }
        } 

どうすればこれをスピードアップできますか、またはこれは正しいアプローチですか?

追加:- バッチ更新を使用できません。すぐに値を挿入する必要があります。次の選択クエリの値が同じになる可能性があるため、DB から値を指定する必要があります。

4

1 に答える 1

6
  • 行ごとに 1 つのトランザクションを使用せず、すべて (または少なくとも重要なサブセット) を 1 つのトランザクションに含めます。
  • 一度に複数の行の存在を確認する単一のクエリを発行する
  • リファレンス ドキュメントのアドバイスに従う
于 2012-05-21T10:51:55.467 に答える