Я использую ModelMapper
в своем Java-приложении для преобразования DTO в POJO.
У меня есть класс MyObjectDto
, который должен быть превращен в MyObject
для использования в качестве сущности иотправлено в базу данных.
У меня есть сценарий использования, когда я получаю MyObjectDto
со свойством id
, которое сообщит моему ORM, что я должен обновить существующую сущность в базе данных.Этот вариант использования работает нормально.
Теперь у меня есть другой вариант использования, когда я получаю тот же MyObjectDto
, за исключением того, что я хочу создать новый в базе данных.Я подумал, что единственное, что может сработать, - это использовать конкретное отображение, где я пропускаю свойство id
, чтобы мой ORM понимал, что это операция create
, а не update
.
IЯ думал, что метод, приведенный ниже, решит мою проблему:
public <D> D map(Object source,
Class<D> destinationType,
String typeMapName)
За исключением того, что я не знаю, как его использовать.До сих пор я пытался сделать это:
@Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
TypeMap<MyObjectDto, MyObject> typeMapForNew = modelMapper.createTypeMap(MyObjectDto.class, MyObject.class)
.addMappings(mapping -> mapping.skip(MyObject::setId));
return modelMapper;
}
Этот метод находится внутри конфигурации.Тогда я подумал, что назвал бы это так, но это дает нормальное отображение:
myObject = modelMapper.map(myObjectDto, MyObject.class, "typeMapForNew");
Спасибо за чтение.
РЕДАКТИРОВАТЬ: для этого конкретного примера, я сделал неправильно в классе конфигурации,Я должен был сделать так:
@Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.createTypeMap(MyObjectDto.class, MyObject.class, "typeMapForNew")
.addMappings(mapping -> mapping.skip(MyObject::setId));
return modelMapper;
}
Тогда я могу использовать именованное сопоставление, и оно работает.Теперь мне нужно понять, как я могу пропустить поля идентификаторов моих объектных дочерних объектов.Но на оригинальный вопрос дан ответ.