一般如果要插入100萬條資料,則會寫如下**:
package org.xiazdong.test; import junit.framework.testcase; import org.hibernate.session; import org.hibernate.sessionfactory; import org.hibernate.transaction; import org.hibernate.cfg.configuration; import org.junit.test; import org.xiazdong.person; public class persontest extends testcase tx.commit(); session.close(); long end = system.currenttimemillis(); system.out.println((end-begin)/1000.0); } }
此程式正常來說是會報錯:
這是因為hibernate缺省會把沒有提交的資料全部快取,但是快取是不能存入100萬條資料的,因此會報錯,我們怎麼樣能夠解決呢?
我們可以通過每100個insert語句時,就強制刷入資料庫,實現**如下:
package org.xiazdong.test; import junit.framework.testcase; import org.hibernate.session; import org.hibernate.sessionfactory; import org.hibernate.transaction; import org.hibernate.cfg.configuration; import org.junit.test; import org.xiazdong.person; public class persontest extends testcase } tx.commit(); session.close(); long end = system.currenttimemillis(); system.out.println((end-begin)/1000.0); } }
經過測試,花費時間為:148秒;
注:如果資料庫在程式執行過程中記錄數為0,是因為資料庫為read commited,事務提交之後才能夠資料。
當然,同樣可以使用hibernate配置來實現同樣功能:
在hibernate.cfg.xml中插入:
50//每50條語句提交一次 false//關閉二級快取
hibernate 批量插入的測試
hibernate 批量插入的測試 最近在專案中做了乙個充值卡的模組,用到了批量插入 我一開始用hibernate插入五十萬條資料 選說一下我的記算機配置 記憶體 1g,cpu pentium r 4 cpu 3.20ghz.配置應該算是過時的了,我的資料庫是 oracle10g,資料庫伺服器在外地...
Hibernate 資料的批量插入 更新和刪除
hibernate完全以物件導向的方式來運算元據庫,當程式裡以物件導向的方式操作持久化物件時,將被自動轉換為對資料庫的操作。例如呼叫session的delete 方法來刪除持久化物件,hibernate將負責刪除對應的資料記錄 當執行持久化物件的set方法時,hibernate將自動轉換為對應的up...
hibernate批量修改,批量刪除
在hibernate應用中如何處理批量更新和批量刪除?批量更新是指在乙個事務中更新大批量資料,批量刪除是指在乙個事務中刪除大批量資料。以下程式直接通過hibernate api批量更新customers表中年齡大於零的所有記錄的age欄位 tx session.begintransaction it...