tgoop.com/BookJava/3877
Create:
Last Update:
Last Update:
🧠 Spring Boot + MapStruct: как избежать null при обновлении сущности
При обновлении сущностей через MapStruct бывает типичная проблема: маппер затирает уже существующие поля null'ами, если они не переданы во входном DTO. Это может легко привести к потере данных. Покажу, как решить это изящно.
Допустим, у нас есть:
public class UserDto {
private String name;
private String email;
}
И сущность:
@Entity
public class User {
private String name;
private String email;
}
Если ты используешь обычный
@MappingTarget, то:
@MappingTarget User user, UserDto dto
— не переданное поле
email в dto затирает значение в user.📌 Чтобы этого не происходило, добавь в маппер:
@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
public interface UserMapper {
void update(@MappingTarget User user, UserDto dto);
}
💡
NullValuePropertyMappingStrategy.IGNORE говорит MapStruct: не трогай те поля, которые в DTO пришли как null.⚠️ Это работает только для объектов, не для
Optional и не для примитивов. Там потребуется другая стратегия — например, обёртки или @Condition.Такой подход позволяет обновлять только те поля, которые реально пришли, и не бояться случайного затирания.
👉@BookJava
BY Библиотека Java разработчика

Share with your friend now:
tgoop.com/BookJava/3877
