我工作的公司正在轉換爲Spring Data,我們大多數人仍在學習。我一直在遇到一個問題,我無法將自己的頭圍繞住。如何處理保存或更新與分離實體有關係的實體,這些實體中的值可能需要更改。使用Spring數據保存與現有實體關係的新實體的正確方法
我有服務,rate_plan和service_rate_plan表。 rate_plan表連接了服務和rate_plan表,並且它有一個用於該費率計劃中服務成本的列。
讓我們假設用戶想要創建一個費率計劃。我創建了一個費率計劃DTO,併爲其添加了所有可能的serviceRatePlan的列表。我將這個呈現給用戶。然後用戶添加費率計劃的信息並設置1個或更多服務的費用並提交表格。
現在我有一個費率計劃DTO,其中填寫了一些信息和一份serviceRatePlan列表,這些列表可能會或可能不會有成本。
對於更新,我公司的當前實踐是獲取serviceRatePlan的列表並迭代它,並使用新信息更新現有列表的新列表。
這對我來說似乎不太合適。如果服務列表是10個項目,我想這可能是好的。但是,如果清單是1000件或類似的東西,它似乎對我來說真的是效率低下。
那麼這樣做的正確,最有效的方法是什麼?
這是我當前如何合併我
protected void buildServiceListFromDto(RatePlan ratePlan, List<RatePlanServiceClassDto> serviceClasses)
{
Set<ServiceRatePlan> servicesForRatePlan = new HashSet<>();
ratePlan.setServicesForRatePlan(servicesForRatePlan);
if (serviceClasses != null)
{
for (RatePlanServiceClassDto serviceClassDto : serviceClasses)
{
if (serviceClassDto.getServices() != null)
{
for (RatePlanServiceDto serviceDto : serviceClassDto.getServices())
{
/*
* Looking at the servrate table it looks as though empty values are not stored.
*/
if (StringUtils.isNotEmpty(serviceDto.getAmount().toString()))
{
ServiceRatePlan serviceRatePlan = new ServiceRatePlan();
serviceRatePlan.setAmount(serviceDto.getAmount().getValue());
serviceRatePlan.setRatePlan(ratePlan);
Service service = serviceRepository.findOne(serviceDto.getNumber());
serviceRatePlan.setService(service);
servicesForRatePlan.add(serviceRatePlan);
}
}
}
}
}
}
我添加了spring-data-jpa標籤,因爲它聽起來像這就是你正在談論的。如果這是錯誤的,請隨時恢復並用正確的標籤替換它。 –