首页 > 解决方案 > 如何在 MapStruct 中将相同的 TO 映射到新的相同 TO?

问题描述

我的TO结构如下

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

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

所以我想映射,

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

它只是映射,

oneComplexCto.setComplexEtos(target.getComplexEtos);

我希望它映射所有嵌套的 ComplexEto 和这些 ComplexEto 内的所有 SimpleEto。(显然我想为每个单独的字段调用设置器)。

标签: javamapstruct

解决方案


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


推荐阅读