2014-02-17 82 views
2

我正在使用JPA框架來執行一些數據庫操作。JPA EntityManager數據庫上的併發操作數限制

首先我做一個EntityManager對象,然後我用的代碼片段

"entityManager.persist(specificEntity)" 

保存特定表的實體對象與此堅持操作從方法實現與annotaion

"@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)" 

我嘗試在該方法中使用for循環保留大量數據,並且所有數據都保存在一個事務中。 通常這一切工作正常,但是當我試圖堅持很多行,我面對的問題和錯誤

"Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)" 

我的DB支持約32,000條併發操作。 那麼在JPA框架中有沒有什麼方法可以指定最大併發操作數。

+0

處理此問題的一種方法是使用分頁。 使用「Requires_New trancsaction」的另一種方法。在我的第一個方法中收集一些特定的行,然後將該對象傳遞給第二個方法並保存數據。但是,我必須在我的代碼中手動處理。我想知道JPA框架是否有辦法解決這個問題。 – kaka

+0

不,你需要解決這個問題,不要讓它成爲JPA的責任。你需要確保不要超越你的數據庫管理系統的限制。換句話說:您可能需要批量處理並保持較小的交易。 – Gimby

回答

2

我假設你在循環內部創建你的實體,EntityManagers FlushModeType設置爲COMMIT,這意味着EM等待你提交事務,直到發送/插入記錄到數據庫。

即使您可以放置​​EM max操作計數值,讓AS在一個事務中處理插入數萬個實體(最壞的情況:即使將事務數據寫入平面文件等待提交)也是如此不是一個好主意。

要麼對組塊進行某種批處理,要麼至少從在這種特殊情況下將FlushModeType設置爲AUTO的記錄自動提交開始。