亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Hibernate 中快速插入許多實體

在 Hibernate 中快速插入許多實體

慕無忌1623718 2022-11-30 11:25:25
我想使用 Hibernate 4.2 將 170.000 個實體的列表插入到我本地安裝的 MySQL 8.0 數據庫中。目前我正在通過 Session#save 方法執行此操作。但是插入那么多實體會持續很長時間。那么是否有可能更快地做到這一點?for (Agagf x : list) {    create(x);}// ------------------------    public static void create(Object obj) throws DatabaseException {        Session hsession = null;        try {            hsession = SqlDataHibernateUtil.getSessionFactory().openSession();            Transaction htransaction = hsession.beginTransaction();            hsession.save(obj);            htransaction.commit();        } catch (HibernateException ex) {            throw new DatabaseException(ex);        } finally {            if (hsession != null)                hsession.close();        }    }
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

Hibernate 頁面上有這篇文章:http: //docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch15.html

根據他們的說法,你需要這樣的東西:

create(list);


// ------------------------


public static void create(List<Object> objList) throws DatabaseException {

  Session hsession = null;


  try {

    hsession = SqlDataHibernateUtil.getSessionFactory().openSession();

    Transaction htransaction = hsession.beginTransaction();


    int count = 0;

    for(Agagf x: objList) {

        hsession.save(obj);

        if ( ++count % 20 == 0 ) { //20, same as the JDBC batch size

            //flush a batch of inserts and release memory:

            hsession.flush();

            hsession.clear();

            count = 0;

        }

    }

  } catch (HibernateException ex) {

    throw new DatabaseException(ex);

  } finally {

    htransaction.commit();

    if (hsession != null) {

      hsession.close();

    }

  }

}

此外,啟用批處理的配置:


如果您正在進行批處理,則需要啟用 JDBC 批處理。如果您想獲得最佳性能,這是絕對必要的。將 JDBC 批處理大小設置為合理的數字(例如 10-50):


hibernate.jdbc.batch_size 20

編輯:在你的情況下,使用批量大小來更好地適應你的體積。請記住在配置和 if 語句中為刷新設置相同的大小。


查看完整回答
反對 回復 2022-11-30
  • 1 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號