Если на фронте использовать RFC 6902, тогда можно говорить о лучших практиках.
Это целостный подход, но может быть дороже и для фронта или для производительности работы с данными в бэк (если обновления будут высоконагруженными) . По сути протокол обновления, в бэк сущность сначала ищется целиком, применяется патч + валидации, затем сущность целиком сохраняется - консистентность сущности не нарушается.
https://www.baeldung.com/spring-rest-json-patchили
https://cassiomolin.com/2019/06/10/using-http-patch-in-spring/Как компромисный вариант, в REST сервисе (HTTP PATCH) возможно принимать json в Map, как id + список полей для обновления с новыми значениями. На слоях ниже, какими нибудь ModelMapper, MapStruct, Orika, Dozer или JMapper мэпить Map из модели api на модель данных, если потребуется.
И уже на слое данных реализовывать протокол обновлений - нужен какой то признак обновления полей, поэтому обычные Entity от PUT метода не пойдут. Проблема с JPARepository (Spring Data JPA) в том, что для обновления нужно сделать отдельный запрос всей сущности, обновить поля и потом уйдет запрос на обновление всей сущности - хороший подход когда важна консистентность, излишний, когда важней количество запросов при обновлении. Можно делать гибче, на Jdbc Template, но и работ больше. Зато можно обойтись только одним запросом update только для измененных полей.
Map можно мэпить на полные Entyty как то так, например для проверки типизации полей и консистентности связанных значений. Но, если необходимо генерировать минимальные обновления на уровне JDBC, список обновленных полей нужно держать отдельно, либо в особых полях сущностей.
Этот подход может усложнить код и отладку, если будет содержать частные технические решения низкого качества - стандартов тут как таковых нет. Обновления отдельных полей одной сущности разными пользователями АПИ, без необходимой валидации, могут привести к неконсистентному состоянию сущности.