web-dev-qa-db-fra.com

Comment cartographier des collections imbriquées à l'aide de MapStruct?

J'ai 2 entités:

Entité 1:

public class Master {

    private int id;
    private Set<SubMaster> subMasters= new HashSet<SubMaster>(0);
}

public class SubMaster{
    private int subId;
    private String subName;
}

Entité 2:

public class MasterDTO {

    private int id;
    private Set<SubMaster> subMasters= new HashSet<SubMaster>(0);
}

public class SubMasterDTO{
    private int subId;
    private String subName;
}

J'utilise MapStruct Mapper pour mapper les valeurs de POJO à un autre.

public interface MasterMapper{
    MasterDTO toDto(Master entity);
}

Je suis capable de mapper avec succès Master vers MasterDTO. Mais, la collection imbriquée de SubMaster dans Master n'est pas mappée à son homologue dans MasterDTO.

Quelqu'un pourrait-il m'aider dans la bonne direction?

10
gschambial

Cet exemple dans le dépôt Github de Mapstruct est une vitrine exacte de ce que vous essayez de faire.

TL; DR Vous aurez besoin d'un mappeur distinct pour la classe SubMaster (appelons-la SubMasterMapper), puis mettez une annotation @Mapper(uses = { SubMasterMapper.class }) sur votre MasterMapper :

public interface SubMasterMapper {
    SubMasterDTO toDto(SubMaster entity);
}

@Mapper(uses = { SubMasterMapper.class })
public interface MasterMapper {
    MasterDTO toDto(Master entity);
}
16
jannis