如何使用 MapStruct 映射嵌套集合?

How to map nested collections using MapStruct?

我有 2 个实体:

实体 1:

public class Master {

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

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

实体 2:

public class MasterDTO {

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

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

我正在使用 MapStruct Mapper 将 POJO 的值映射到另一个。

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

我能够成功地将 Master 映射到 MasterDTO。但是,MasterSubMaster 的嵌套集合未映射到 MasterDTO 中的对应集合。

谁能帮我指明正确的方向?

Mapstruct 的 Github 存储库中的

This example 准确展示了您正在尝试做的事情。

TL;DR 您需要为 SubMaster(我们称之为 SubMasterMapper)class 单独映射器,然后在 @Mapper(uses = { SubMasterMapper.class }) 上添加注释 MasterMapper:

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

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