Die Firma, für die ich arbeite, konvertiert zu Spring Data und die meisten von uns lernen noch. Ich laufe immer wieder auf ein Problem, das ich nicht richtig verstehen kann. Wie behandelt man das Speichern oder Aktualisieren einer Entität, die eine Beziehung zu getrennten Entitäten hat, bei denen Werte in diesen Entitäten geändert werden müssen?Korrekte Methode zum Speichern einer neuen Entität mit Beziehungen zu vorhandenen Entitäten mit Spring Data
Ich habe Service, Rate_plan und Service_rate_plan Tabellen. Die Tabelle rate_plan verbindet die Tabellen service und rate_plan und enthält eine Spalte für die Kosten des Dienstes in diesem Tarifplan.
Nehmen wir an, dass ein Benutzer einen Tarif erstellen möchte. Ich erstelle einen Rate Plan DTO und füge eine Liste aller möglichen ServiceRatePlans hinzu. Ich präsentiere dies dem Benutzer. Der Benutzer fügt dann Informationen für den Tarif hinzu und legt die Kosten für einen oder mehrere der Dienste fest und reicht das Formular ein.
Jetzt habe ich eine Rate Plan DTO mit einigen Informationen ausgefüllt und eine Liste von ServiceRatePlan, die möglicherweise oder nicht kosten.
Für ein Update die aktuelle Praxis in meinem Unternehmen ist eine Liste der ServiceRatePlan holen und es zu iterieren und die neue Liste aktualisiert die bestehende Liste mit den neuen Informationen.
Das scheint einfach nicht richtig zu mir. Wenn die Serviceliste 10 Elemente umfasste, dann könnte es in Ordnung sein. Aber wenn die Liste 1000 Artikel oder so ähnlich wäre, wäre es meiner Meinung nach wirklich ineffizient.
Was also ist die richtige, effizienteste Art, dies zu tun?
Dies ist ein Beispiel dafür, wie ich zur Zeit bin ich verschmelzenden
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);
}
}
}
}
}
}
Ich habe das spring-data-jpa-Tag hinzugefügt, da es sich so anhört, worüber du sprichst. Fühlen Sie sich frei, um es zu ersetzen und es mit dem richtigen Tag zu ersetzen, wenn das falsch war. –