web-dev-qa-db-ja.com

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);
}

MasterMasterDTOに正常にマップできます。ただし、SubMaster内のMasterのネストされたコレクションは、MasterDTO内の対応するものにマップされません。

誰かが正しい方向に私を助けてくれませんか?

10
gschambial

この例 MapstructのGithubリポジトリの=は、あなたがやろうとしていることの正確なショーケースです。

TL; DR SubMasterSubMasterMapperと呼びましょう)クラスには別のマッパーが必要で、MasterMapper@Mapper(uses = { SubMasterMapper.class })アノテーションを付けます。 :

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

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