[英]Spring Data JPA save many to many relation while creating the objects
有沒有一種方法可以優化以下代碼。 這段代碼運行了大約1000次,並且與其他代碼段(無法更改)的組合將導致嚴重的性能問題。
有沒有辦法減少數據庫操作的數量? 我將additionalFilesSave放在循環之外,只能執行一次,但是隨后創建ProductMAdditionalFilesEntities的部分開始引起其他文件的ID問題(因為未保存文件的ID為0)。
Set<AdditionalFilesEntity> additionalFilesEntities = productEntity.getAdditionalFilesEntities();
if (p.getAdditionalFiles() != null) {
for (AdditionalFile additionalFile : p.getAdditionalFiles()) {
AdditionalFilesEntity additionalFilesEntity = new AdditionalFilesEntity();
if (additionalFile.getFileType().equals("PICTURE")) {
additionalFilesEntity.setFileType(FileTypeEnum.PICTURE);
} else {
additionalFilesEntity.setFileType(FileTypeEnum.FILE);
}
additionalFilesEntity.setFileName(additionalFile.getFileName());
additionalFilesEntity.setFileDescription(additionalFile.getFileDescription());
additionalFilesEntity.setUrl(URLDecoder.decode(additionalFile.getFileUrl()));
additionalFilesEntities.add(additionalFilesEntity);
}
}
additionalFilesRepository.save(additionalFilesEntities);
for (AdditionalFilesEntity additionalFilesEntity : additionalFilesEntities) {
pmf.add(new ProductMAdditionalFilesEntity(productEntity.getId(),
null,
additionalFilesEntity.getId()));
}
如果JdbcTemplate
是一個選項,則應采用以下常規方法:
使用JdbcTemplate.update()
變體之一插入文件。 使用KeyHolder
獲取數據庫生成的ID。
第一步,使用產品ID和從數據庫中獲得的ID插入對產品的引用。 如果您的數據庫支持merge / upsert語句,則可以在單個語句中完成。 否則,這是兩個語句。
這樣可以將工作減少到每個文件2-3個語句。
如果您可以使用批處理更新,這應該更快。 不幸的是,批量更新不適用於id generation 。 您始終可以將批處理更新用於第二步。 對於第一個,例如,如果使用UUID,則可以在Java端生成ID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.