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

问题描述 投票:0回答:1

我的TO结构如下

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

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

所以我想要映射,

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

这只是映射,

oneComplexCto.setComplexEtos(target.getComplexEtos);

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

java mapstruct
1个回答
1
投票

正如您所注意到的,只要类型相同,MapStruct就会调用setter。为了实现深度克隆,您需要在所有类型之间进行deifine映射。在你的情况下,这将是:

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

你应该关注并upvote mapstruct/mapstruct-695寻找允许MapStruct禁用相同类型的直接集合并执行深度克隆的东西。

© www.soinside.com 2019 - 2024. All rights reserved.