Я пишу клиент-серверное веб-приложение с начальной загрузкой, которое имеет ресурс master-detail, и я хочу знать, есть ли способ обновить весь ресурс (master и detail / s) только за один вызовPUT метод.
Я уже обновил главный ресурс за один вызов, а каждую деталь - за другой. Я не знаю, является ли это правильным способом.
Вот мой метод обновления для моего основного ресурса:
public PaymentDTO update(Integer id, PaymentDTO payment) {
final PaymentDTO toUpdate = convertDomainToDto(paymentDao.findById(id).get());
toUpdate.setBillType(payment.getBillType());
toUpdate.setDate(payment.getDate());
toUpdate.setDocumentType(payment.getDocumentType());
toUpdate.setNumber(payment.getNumber());
toUpdate.setPersonalDebtId(payment.getPersonalDebtId());
toUpdate.setProviderId(payment.getProviderId());
toUpdate.setStamping(payment.getStamping());
toUpdate.setTotal(payment.getTotal());
toUpdate.setWorkId(payment.getWorkId());
toUpdate.setDetails(payment.getDetails());
save(toUpdate);
return toUpdate;
}
метод обновления для подробного ресурса:
public PaymentDetailDTO updateDetail(Integer id, PaymentDetailDTO paymentDetail) {
final PaymentDetailDTO toUpdate = convertToDetailDto(paymentDetailDao.findById(id).get());
toUpdate.setPaymentConceptId(paymentDetail.getPaymentConceptId());
toUpdate.setQuantity(paymentDetail.getQuantity());
toUpdate.setUnitPrice(paymentDetail.getUnitPrice());
paymentDetailDao.save(convertToDetailDomain(toUpdate));
return toUpdate;
}
и метод сохранения:
public PaymentDTO save(PaymentDTO dto) {
List<PaymentDetailDTO> detailsDto = dto.getDetails();
final PaymentDomain payment = convertDtoToDomain(dto);
paymentDao.save(payment);
detailsDto.forEach(detail -> detail.setPaymentId(payment.getId()));
List<PaymentDetailDomain> detailsDomain = convertToDetailDomainList(detailsDto);
detailsDomain.forEach(domain -> paymentDetailDao.save(domain));
payment.setPayment_details(detailsDomain);
return convertDomainToDto(payment);
}
Когда я пытаюсь обновить все в одном вызове, детали, которые уже есть, не обновляются, и детали, которые я хочу обновить с его новыми атрибутамисохраняется как новая деталь.