2014-02-13 70 views
0

我有2個實體類(表A的AEntity和表B的BEntity)。表A鏈接到表B.因此AEntity類具有BEntity對象列表並聲明如下。覆蓋JPA框架中的實體刪除操作

@OneToMany(mappedBy =「AEntity」,cascade = CascadeType.REMOVE,fetch = FetchType.LAZY) private List = new ArrayList();

如果我通過使用「entityManager.remove(aEntity)」刪除AEntity,這也將刪除B表的BEntity。

對於少量數據,這種情況正確發生。但是,如果數據增加了,它會失敗,併發生異常「事務協調器中的操作記錄不足(增加MaxNoOfConcurrentOperations)」。

發生此異常是因爲它一次刪除大量數據。 所以我想重寫BEntity的刪除/刪除操作,並想要處理刪除使用分頁,即如果總共1缺少行將被刪除,我想刪除1000在一個交易,然後下一個1000.

我怎樣才能做到這一點。 請幫助

+0

您是否可以刪除單個數據庫請求中的批次B,如1000個B實體的列表?如果是這樣,那麼我爲你解決問題。 –

+0

是的,我可以刪除 – kaka

回答

0

溶液與僞代碼描述如下(我不使用你的技術,所以我只能共享算法):

batchSize <- 1000 
while A.listOfB.size() > batchSize do 
    tempList <- A.listOfB.copyBatch(batchSize) 
    tempList.deleteAll() 
    A.listOfB.deleteBatch(batchSize) 
end while 
A.delete() 

我希望算法很容易理解。