我的TO结构如下
OneComplexCto
-List<ComplexEto>
--List<SimpleEto>
我想让它自己映射(用于触发ValueChangeListener)
所以我想要映射,
OneComplexCto mapOneComplexCto(OneComplexCto source, @TargetMapping OneComplexCto target);
这只是映射,
oneComplexCto.setComplexEtos(target.getComplexEtos);
我想让它映射所有嵌套的ComplexEto和那些ComplexE中的所有SimpleEto。 (显然我想为每个字段调用setter)。
正如您所注意到的,只要类型相同,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禁用相同类型的直接集合并执行深度克隆的东西。