Я использую MapStruct для dto <-> entity
сопоставления. Те же средства сопоставления используются для создания и обновления объектов из dtos. Проверка идентификатора dto выполняется, чтобы узнать, должна ли быть создана новая сущность (id == null) или она должна быть получена из базы данных (id! = Null).
На самом деле я использую MapperDecorator в качестве временного решения. Пример :
Картограф
@Mapper
@DecoratedWith(UserAccountDecorator.class)
public interface UserAccountMapper {
UserAccountDto map(User user);
User map(UserAccountDto dto);
User map(UserAccountDto dto, @MappingTarget User user);
}
Декоратор
public abstract class UserAccountDecorator implements UserAccountMapper {
@Autowired
@Qualifier("delegate")
private UserAccountMapper delegate;
@Autowired
private UserRepository userRepository;
@Override
public User map(UserAccountDto dto) {
if (dto == null) {
return null;
}
User user = new User();
if (dto.getId() != null) {
user = userRepository.findOne(dto.getId());
}
return delegate.map(dto, user);
}
}
Но это решение становится тяжелым из-за того, что для каждого маппера нужно создавать декоратор.
Есть ли хорошее решение для этого?
Я использую :
- MapStruct: 1.1.0