使用hibernate將 100 000 條記錄插入到資料庫的乙個很自然的做法可能是這樣的
session session = sessionfactory.opensession();這段程式大概執行到 50 000 條記錄左右會失敗並丟擲transaction tx = session.begintransaction();
for ( int i=0; i<100000; i++ )
tx.commit();
session.close();
記憶體溢位異常(outofmemoryexception)
。 這是因為 hibernate 把所有新插入的客戶(customer)
例項在 session級別的快取區進行了快取的緣故。
我們會在本章告訴你如何避免此類問題。首先,如果你要執行批量處理並且想要達到乙個理想的效能, 那麼使用jdbc的批量(batching)功能是至關重要。將jdbc的批量抓取數量(batch size)引數設定到乙個合適值 (比如,10-50之間):
hibernate.jdbc.batch_size 20注意,假若你使用了
identiy
識別符號生成器,hibernate在jdbc級別透明的關閉插入語句的批量執行。
你也可能想在執行批量處理時關閉二級快取:
hibernate.cache.use_second_level_cache false但是,這不是絕對必須的,因為我們可以顯式設定
cachemode
來關閉與二級快取的互動。
如果要將很多物件持久化,你必須通過經常的呼叫flush()
以及稍後呼叫clear()
來控制第一級快取的大小。
session session = sessionfactory.opensession();transaction tx = session.begintransaction();
for ( int i=0; i<100000; i++ )
}
tx.commit();
session.close();
Hibernate 批量處理
1.批量插入 批處理之新增多條學生記錄 會出現一級快取溢位 public void addmanystudents session.gettransaction commit hibernatesessionfactory.closesession 由於hibernate 預設的是使用一級快取,而一...
在Hibernate中處理批量更新和批量刪除
page load marshal data pump 批量更新是指在乙個事務中更新大批量資料,批量刪除是指在乙個事務中刪除大批量資料。以下程式直接通過hibernate api批量更新customers表中年齡大於零的所有記錄的age欄位 tx session.begintransaction i...
hibernate批量修改,批量刪除
在hibernate應用中如何處理批量更新和批量刪除?批量更新是指在乙個事務中更新大批量資料,批量刪除是指在乙個事務中刪除大批量資料。以下程式直接通過hibernate api批量更新customers表中年齡大於零的所有記錄的age欄位 tx session.begintransaction it...