Сопоставление значений проекции с сущностью с помощью Spring Data
У меня есть объект с множеством полей и проекция со многими, но не со всеми этими полями. Когда я обновляю объект в PUT/PATCH, обычно я получаю проекцию с@RequestBody
и вручную сопоставьте все поля из проекции с сущностью, а затем сохраните в репозитории.
@RequestMapping(method = PATCH, path = "/{id}")
public ResponseEntity<?> update(@PathVariable Long id, @RequestBody @Valid ResourceEntity projection) {
ResourceEntity entity = repository.findById(id).orElseThrow(ResourceNotFoundException::new);
entity.setField(projection.getField());
entity.setAnotherField(projection.getAnotherField());
...
try {
repository.save(entity);
} catch (DataIntegrityViolationException e) {
throw new InvalidCommandException("Data is invalid for update.");
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
Обычно это хорошо, но в этом случае у меня много полей, и установка их всех вручную из проекции немного утомительна.
Я хотел бы знать, существует ли способ сопоставить значения из проекции с существующей сущностью в Spring Data.
Примерно так:
@RequestMapping(method = PATCH, path = "/{id}")
public ResponseEntity<?> update(@PathVariable Long id, @RequestBody @Valid ResourceEntity projection) {
ResourceEntity entity = repository.findById(id).orElseThrow(ResourceNotFoundException::new);
SpringDataHelper.mapProjectionValuesToEntity(projection, entity);
try {
repository.save(entity);
} catch (DataIntegrityViolationException e) {
throw new InvalidCommandException("Data is invalid for update.");
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}