繁体   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