如何在MapStruct中将相同的TO映射到新的相同的TO?

时间:2019-03-11 11:43:14

标签: java mapstruct

我的TO结构如下

OneComplexCto
-List<ComplexEto>
--List<SimpleEto>

我想将其与自己映射(用于触发ValueChangeListener)

所以我想映射,

OneComplexCto mapOneComplexCto(OneComplexCto source, @TargetMapping OneComplexCto target);

就像映射一样,

oneComplexCto.setComplexEtos(target.getComplexEtos);

,我希望它可以映射所有已嵌套的ComplexEto以及这些ComplexEto内部的所有SimpleEto。 (显然,我想为每个字段调用设置器。)

1 个答案:

答案 0 :(得分:1)

您已经注意到MapStruct只会在类型相同的情况下调用setter。为了实现深度克隆,您需要定义所有类型之间的映射。在您的情况下,它看起来像:

@Mapper
public interface ComplexMapper {

    OneComplexCto mapOneComplexCto(OneComplexCto source, @MappingTarget OneComplexCto target);

    List<ComplexEto> map(List<ComplexEto> complexEtos);

    ComplexEto map(ComplexEto complexEto);

    List<SimpleEto> map(List<SimpleEto> simpleEtos);

    SimpleEto map(SimpleEto simpleEto);
}

您应该关注并赞成mapstruct/mapstruct-695,该问题正在寻找可以使MapStruct禁用相同类型的直接集并执行深度克隆的东西。