Java 列表类型的对象上的MapStruct映射

Java 列表类型的对象上的MapStruct映射,java,mapstruct,Java,Mapstruct,我尝试将MapStruct用于类似于以下内容的结构: @Data public class ClassAEntity { private int id; private String name; private String numT; private List<ClassBEntity) bs; } @Data public class ClassBEntity { private int id; private String name; private S

我尝试将MapStruct用于类似于以下内容的结构:

@Data
public class ClassAEntity {
  private int id;
  private String name;
  private String numT;
  private List<ClassBEntity) bs;
}

@Data
public class ClassBEntity {
  private int id;
  private String name;
  private String numT;
  private List<Other> oc;
}

@Data
public class ClassA {
  private int id;
  private String name;
  private List<ClassB) bs;
}

@Data
public class ClassB {
  private int id;
  private String name;
  private List<Other> oc;
}
另一方面,我需要忽略classBEntity的参数oc,因为“other”对象包含classAEntity并形成一个循环对象。(因为我使用oneToMany JPA)。我尝试了以下方法:

@Data
public class ClassAEntity {
  private int id;
  private String name;
  private String numT;
  private List<ClassBEntity) bs;
}

@Data
public class ClassBEntity {
  private int id;
  private String name;
  private String numT;
  private List<Other> oc;
}

@Data
public class ClassA {
  private int id;
  private String name;
  private List<ClassB) bs;
}

@Data
public class ClassB {
  private int id;
  private String name;
  private List<Other> oc;
}
@Mapping(target=“bs[].oc”,ignore=true)


感谢您的帮助

MapStruct不支持为集合定义嵌套映射。您必须定义更明确的方法

例如,要将
numT
映射到
bs[].numT
并忽略
bs[].oc
您需要执行以下操作:

@Mapper
public MyMapper {

    default ClassAEntity map(ClassA classA, String numT) {
        return map(classA, numT, numT);
    }
    
    ClassAEntity map(ClassA classA, String numT, @Context String numT);

    @AfterMapping
    default void setNumTOnClassBEntity(@MappingTarget ClassBEntity classB, @Context String numT) {
        classB.setNumT(numT);
    }

    @Mapping(target = "oc", ignore = "true")
    ClassBEntity map(ClassB classB);

}

MapStruct不支持为集合定义嵌套映射。您必须定义更明确的方法

例如,要将
numT
映射到
bs[].numT
并忽略
bs[].oc
您需要执行以下操作:

@Mapper
public MyMapper {

    default ClassAEntity map(ClassA classA, String numT) {
        return map(classA, numT, numT);
    }
    
    ClassAEntity map(ClassA classA, String numT, @Context String numT);

    @AfterMapping
    default void setNumTOnClassBEntity(@MappingTarget ClassBEntity classB, @Context String numT) {
        classB.setNumT(numT);
    }

    @Mapping(target = "oc", ignore = "true")
    ClassBEntity map(ClassB classB);

}