Сопоставление значений проекции с сущностью с помощью 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);
    }

0 ответов

Другие вопросы по тегам