這將是可能是好的,如果你發佈你所使用的數據庫引擎。每個數據庫實現對插入有自己的批處理優化。 JPA在所有這些方面並不是最新的。
我認爲如果你爲了優化性能,你應該首先檢查你運行的引擎/版本的數據庫文檔,以及它支持的是什麼。然後查看您正在使用的JPA實現(如OpenJPA或Hibernate?)是否支持此語法。
我試過使用批量參數JPA各種不同的時間,問題是這批更新仍然很慢。通常,數據庫供應商提供了多個插入語法替代方案,而JPA支持這些方法。 JPA的批量更新只是意味着所有插入操作都是在單個事務中執行的。但它不使用數據庫供應商特定的優化SQL。
示例:MSSQL支持每個插入語句多個映射(我認爲最多可達1000個)。
所以不是
INSERT INTO [my.[dbo].[entity]
([col1], [col2], [col3])
VALUES ('val1a','val2a','val3a');
INSERT INTO [my.[dbo].[entity]
([col1], [col2], [col3])
VALUES ('val1b','val2b','val3b');
你可以這樣做:
INSERT INTO [my.[dbo].[entity]
([col1], [col2], [col3])
VALUES ('val1a','val2a','val3a')
,('val1b','val2b','val3b');
後者的說法是快了很多,然後執行前兩個刀片。另外,如果你想通過JPA的「批量更新」在單個交易中捆綁前兩個,但是大多數JPA實現不支持後一種語法,所以我不得不編寫一個本地查詢來實現這一目標。對於每個數據庫供應商,還有更多性能優化的導入/插入/更新方式。你不會在JPA實現中找到那些。
因此,不是試圖使JPA註釋/ JPQL查詢工作,而是首先決定要實現的性能優化,然後編寫原生SQL查詢並通過JPA執行它。每個JPA實現都有執行本機查詢的方法。