我工作的公司正在转换为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标签,因为它听起来像这就是你正在谈论的。如果这是错误的,请随时恢复并用正确的标签替换它。 –