我的TO结构如下

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


我想让它与自己映射(用于触发ValueChangeListener)

所以我想像

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


就像映射一样

oneComplexCto.setComplexEtos(target.getComplexEtos);


我想让它映射那些ComplexEto中所有嵌套的ComplexEto和所有SimpleEto。 (显然,我想为每个字段调用设置器)。

最佳答案

您已经注意到,如果类型相同,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禁用相同类型的直接集并执行深度克隆的内容。

关于java - 如何在MapStruct中将相同的TO映射到新的相同的TO?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55101112/

10-11 17:19