Dto из нескольких строк в карте объектов Entity - PullRequest
1 голос
/ 29 января 2020

Я ищу этот вопрос в SO, но не могу найти ответ.

Я хотел бы знать, есть ли способ сопоставить поля нескольких сущностей с одним DTO, но с другой картограф и в инкапсулированном DTO.

Пример:

Это моя сущность:

public class Identification{
    long dbId;
    String id;
    String type;
    String completeName;
    boolean status;
}

Мой DTO:

public class PersonEntity{
    String completeName;
    IdentificationEntity identificationEntity;
}

public class IdentificationEntity{
    String documentNumber;
    boolean status;
    String documentType;
}

I Создал мой маппер:

@Mapper(componentModel = "spring", uses = {IdentificationMapper.class})
public interface PersonMapper {



    PersonEntity toPersonEntity(Identification identification);
}
@Mapper(componentModel = "spring")
public interface IdentificationMapper {

    @Mapping(source = "id", target = "documentNumber")
    @Mapping(source = "type", target = "documentType")
    IdentificationEntity toIdentificationEntity(Identification identification);


}

, но я не знаю, как сопоставить IdentificationEntity из PersonEntity с маппером. Я имею в виду, если есть способ без использования @AfterMapping, уже опробованный с аннотацией использует , и на самом деле я не знаю, возможно ли это с помощью qualBy

@Mapper(componentModel = "spring")
public interface PersonMapper {


    @Mapping(target="identificationEntity", qualifiedBy=IdentificationMapper.class)
    PersonEntity toPersonEntity(Identification identification);
}

Пожалуйста, помогите с этим. : D

1 Ответ

0 голосов
/ 29 января 2020

Из того, что я понял, вы хотели бы использовать IdentificationMapper для отображения Identification в IdentificationEntity.

Вы почти получили его.

Вы должны указать MapStruct на отображение identification в identificationEntity из PersonEntity.

Например,

@Mapper(componentModel = "spring", uses = {IdentificationMapper.class})
public interface PersonMapper {


    @Mapping(target = "identificationEntity", source = "identification")
    PersonEntity toPersonEntity(Identification identification);
}

IdentificationMapper остается прежним .

Относительно qualifiedBy. Это необходимо, когда вы хотите отобразить некоторые свойства особым образом. Например, в верхнем регистре некоторые строки, но только для этих указанных c свойств. Там вам нужно использовать MapStruct @Qualifier для квалификации ваших методов. Подробнее о них вы можете узнать из Выбор метода отображения на основе квалификаторов из документации

...