2012-05-30 58 views
1

我有一個LinkedBlockingQueue,我想將所有元素保存到數據庫中。我知道我可以用一個保存一個:如何在Play中保存對象列表JPA

ObjectModel om = new ObjectModel(); 
om.save(); 

然而,這意味着我必須遍歷所有的元素和做每一個新的連接。我可以一次插入整個列表嗎?

+0

您可以遍歷所有元素並調用save()。但每次都不會創建新的連接。遊戲中的事務綁定到HTTP連接。 –

回答

2

在play 1.x中,當服務器收到一個請求時,play/jpa會打開一個事務給你的數據庫。如果發生任何錯誤,此事務將自動回滾,否則在將響應發送給客戶端時自動提交。

因此,即使循環遍歷JPA實體並對它們依次調用save(),它們也將在同一事務中以相同的連接執行。

我認爲它在Play 2中的工作方式相同,但說實話,我不知道。

1

簡單的答案不會。行後的某個人將不得不爲所有單個對象執行插入查詢。

您不必爲每個插入創建新的連接。您應該在每次迭代中在同一連接上創建一個連接並觸發插入。

+0

沒有JPA等同於在MySQL中一次插入多行?因爲能夠插入多行會加快查詢的速度,因爲反對一次插入一行。 –

0

也許this question讓你更進一步。如果你知道如何在底層數據庫上做你想要的,你也可以使用本地查詢(你可以通過EntityManager創建),我想。