hibernate批量處理

2021-07-25 03:48:00 字數 1096 閱讀 1671

使用hibernate將 100 000 條記錄插入到資料庫的乙個很自然的做法可能是這樣的

session session = sessionfactory.opensession();

transaction tx = session.begintransaction();

for ( int i=0; i<100000; i++ )

tx.commit();

session.close();

這段程式大概執行到 50 000 條記錄左右會失敗並丟擲記憶體溢位異常(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...