簡體   English   中英

Java-Spring-Hibernate從數據庫中提取1000個對象需要很長時間

[英]Java - Spring - Hibernate extracting 1000 of objects from Database takes long time

我有一個Postgres數據庫,其中包含由Hibernate使用@Entity批注創建的17個表,並且IAM使用findAll方法運行CrudRepository從數據庫中提取對象

一切正常,直到我嘗試從數據庫中檢索1000多個對象為止,這需要27秒。 檢索600個對象大約需要10秒鍾。

時間正成倍增加,我想知道是否有解決方案,我知道如果我嘗試聯接表會加快過程,但是在17個表上聯接表是很多工作。 除了我正在使用的方法以外,還有其他提取方法可以更快地檢索對象嗎?

這是我檢索對象的方式:

public List<Document> getAllDatabaseDocuments() {
    List<Document> listOfDocs = new ArrayList<>();
    listOfDocs.addAll((List<Document>) sdr.findAll());
    return listOfDocs;
}

所有JPA提供程序都有QueryHints來進行某些查詢優化。 它使您能夠在單個查詢或使用聯接中獲取所有關聯。 例如,在EclipseLink中,可以使用QueryHints.BATCH在單個查詢中獲取所有one to manymany to many關聯。

代替使用findAll() ,在您的實體中創建您自己的查詢並提供特定於休眠的適當查詢提示。 在這種情況下, join-fetch將花費大量時間,因為您有很多相關實體。 嘗試使用batch-fetch因為它會減少查詢數量並有效地加快提取速度。

您可以在此處了解有關休眠特定提取策略的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM