我的TO结构如下
OneComplexCto
-List<ComplexEto>
--List<SimpleEto>
我想将其与自己映射(用于触发ValueChangeListener)
所以我想映射,
OneComplexCto mapOneComplexCto(OneComplexCto source, @TargetMapping OneComplexCto target);
就像映射一样,
oneComplexCto.setComplexEtos(target.getComplexEtos);
,我希望它可以映射所有已嵌套的ComplexEto以及这些ComplexEto内部的所有SimpleEto。 (显然,我想为每个字段调用设置器。)
答案 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禁用相同类型的直接集并执行深度克隆的东西。