Частичное обновление с использованием Spring BootJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Частичное обновление с использованием Spring Boot

Сообщение Anonymous »

Я работаю над проектом Java Spring Boot. У меня есть сущность, у которой 20 полей. В настоящее время у меня есть метод PUT, который принимает эти 20 полей, все они не являются нулевыми, и я проверяю их, используя валидаторы, включая моих пользовательских валидаторов. Но это дорого. Даже если я хочу изменить одно поле в своем БД, я полностью приношу строку, обновляю все поля, используя пользовательский карт и сохранить в дБ. В этой реализации, даже если только одно поле меняется, я должен отправлять все поля в запросе, а также перезаписываю 19 неизменного поля в БД, что является дорогостоящим. Я ищу решения: < /p>

Я должен быть в состоянии отправлять только поля, которые должны измениться, и я должен быть в состоянии проверить их на уровне DTO, используя валидатор (например: я должен быть в состоянии проверить, значения между 0 и 100. В текущем реализации у меня есть пользовательский валидатор для этого) < /li>
я должен быть в состоянии, чтобы это было в обращении только к этому. Я не должен перезаписывать значения, которые должны оставаться такими же. < /Li>
(своего рода необязательно) было бы лучше, если бы это могло быть общим. Я могу легко адаптироваться для своих различных контроллеров. < /Li>
< /ol>
Я искал размышления Java и нашел эту реализацию: < /p>
@PatchMapping("/{id}")
public Product updateProductFields(@PathVariable int id,@RequestBody Map fields){
return service.updateProductByFields(id,fields);
}
< /code>
public Product updateProductByFields(int id, Map fields) {
Optional
existingProduct = repository.findById(id);

if (existingProduct.isPresent()) {
fields.forEach((key, value) -> {
Field field = ReflectionUtils.findField(Product.class, key);
field.setAccessible(true);
ReflectionUtils.setField(field, existingProduct.get(), value);
});
return repository.save(existingProduct.get());
}
return null;
}

< /code>
public interface ProductRepository extends
JpaRepository {

}
< /code>
But I am not sure if this satisfies my desires. Do you have any suggestions?


Подробнее здесь: https://stackoverflow.com/questions/777 ... pring-boot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»