mapstruct - обновить существующий bean-компонент - игнорируя поле 'id' во всех дочерних / вложенных bean-компонентах (массивах, наборах и т. д.) - PullRequest
0 голосов
/ 07 июня 2019

У меня есть родительский класс со многими дочерними объектами. Есть 2 экземпляра этого родительского класса. Хотите скопировать данные одного экземпляра в другой (игнорируя свойство 'id' во всех дочерних объектах)

---- для краткости скрываем геттеры и сеттеры

public class IdBean {
    private Long id;
}

public class City extends IdBean {
    private String name;
}

public class Country extends IdBean {
    private String name;
    private List<City> cities;
}

public class Student extends IdBean {
    private String name;
}

public class School extends IdBean {
    private String name;
    private List<Student> students;
    private List<Country> countries;
}

@MapperConfig(mappingInheritanceStrategy = MappingInheritanceStrategy.AUTO_INHERIT_FROM_CONFIG)
public interface SchoolCentralConfig {

    @Mapping(ignore = true, target = "id")
    IdBean updateBeanEntityFromDto(IdBean dto);
}

@Mapper(config = SchoolCentralConfig.class)
public interface SchoolMapper {
    SchoolMapper INSTANCE = Mappers.getMapper( SchoolMapper.class );
    @Mapping(target = "companies.id", ignore = true )
    void updateSchoolFromDto(School schoolDTO, @MappingTarget School      schoolEntity);
}

Я хочу игнорировать все свойства 'id' из всех вложенных полей.

1 Ответ

0 голосов
/ 21 июня 2019

MappingInheritanceStrategy.AUTO_INHERIT_FROM_CONFIG (к сожалению) пока не работает для вложенных методов.

Что вы можете сделать, так это написать подпись для Country и Student. Тогда это будет работать.

Итак:

@Mapper(config = SchoolCentralConfig.class)
public interface SchoolMapper {
    SchoolMapper INSTANCE = Mappers.getMapper( SchoolMapper.class );

    void updateSchoolFromDto(School schoolDTO, @MappingTarget School      schoolEntity);

    void updateStudentFromDto(Student studentDTO, @MappingTarget Student      studentEntity);

    // etc

}
...