У меня есть API с весенней загрузкой, и я использую mapstruct, и я просто хочу обновить сущность Person. Для этого, имея PersonDto обновить Person.
Что у меня так далеко:
Mapper:
@Mapper
public interface PersonMapper {
PersonDto toPersonDto(Person person);
Person toPerson(PersonDto personDto);
Person updatePersonFromDto(PersonDto persoonDto, @MappingTarget
Person document);
}
На уровне сервиса:
Найти человека:
public PersonDto updatePerson(Long personId) {
PersonDto personDto = personService.findById(personId)
.orElseThrow(() -> new PersonNotFoundException(id));
personDto.set(...) //set others properties
Person person = personMapper.toPerson(personDto);
person = personMapper.updatePersonFromDto(personDto, person);
personRepository.save(person);
return personMapper.toPersonDto(person);
}`
Мой вопрос, есть ли стратегия или лучший способ обновить сущность из DTO?
Edit:
Я смог решить часть, теперь я не теряю идентификатор, но я все равно создаю новый объект вместо того, чтобы обновлять его. Идентификатор находится в AbstractPersistableEntity.
@Entity
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person extends AbstractPersistableEntity<ID> implements Serializable {
@Column
private String name;
@Column
private String lastName;
@Column
private Integer age;
}
public class PersonDto {
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Long id;
private String name;
private String lastName;
private Integer age;
}