【发布时间】:2021-02-27 22:25:13
【问题描述】:
我有一个服务方法:
@Transactional
@Override
public List<DLevelsDTO> getAll(InputDTO json ){
String idAdminPK = json.getIdAmminstrazionePK();
Long idAdminPKDecrypted = Long.parseLong(EncrypterUtils.decrypt(idAdminPK));
List<DLevels> entityList = dLevelsRepository.findAll();
List<DLevelsDTO> resultList = new ArrayList<DLevelsDTO>();
for(DLevels entity : entityList) {
DLevelsDTO dto = Converter.convert(entity, DLevelsDTO.class);
Optional<List<DUnitEntity>> optHList = dUnitsRepository.findUnit(idAdminPKDecrypted, entity.getCodiLevel());
if (optHList.isPresent()) {
List<DUnitDTO> jsonResponseList = new ArrayList<DUnitDTO>();
List<DUnitEntity> entityHList =optHList.get();
for(DUnitEntity entityH : entityHList) {
DUnitDTO jsonResponse = new DUnitDTO();
jsonResponse.setIdUnit(EncrypterUtils.encrypt(entityH.getSequIdUnitaOrganizzativaH()));
jsonResponse.setFkAdmin(EncrypterUtils.encrypt(entityH.getFkAdmin().longValue()));
jsonResponse.setCodiCodiceUo(entityH.getCodiCodiceUo());
jsonResponse.setDescDenomUo(entityH.getDescDenomUo());
jsonResponseList.add(jsonResponse);
}
dto.setList(jsonResponseList);
}
resultList.add(dto);
}
return resultList;
}
在第一次调用 jpa 存储库 ( findAll ) 时,结果长度 > 4000 行 在这一行的 for-cycle 中,对于每一个我搜索另一个对象,并且这里我有大量数据。
最后的 dto 是:
List resultList = new ArrayList() // > 4000 行
每个对象都有 List entityHList // > 1000 行
服务响应时间为 10-15 秒...
有减少服务时间的最佳方法吗? 如果我使用 Oracle 表视图或递归查询而不是 Java?
感谢回复
【问题讨论】:
-
你能分页吗?
标签: spring-boot hibernate jpa spring-data-jpa spring-data