如何在 Mapstruct 中管理阴影

How to manage shadowing in Mapstruct

public abstract class CaseDTOBase{

       private Integer version;

       public static void mapFromCaseToCaseDTO(Fall fall, CaseDTOBase caseDTOBase) {
        caseDTOBase.setVersion(fall.getVersion());}
       }
    }

public class AufCaseDTO extends CaseDTOBase{

  private Integer version;

  public static AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR) {

  AufCaseDTO aufCaseDTO = AufCaseDTO.builder().version(aufFall.getVersion()).build();

  CaseDTOBase.mapFromCaseToCaseDTO(aufFall.getFall(), aufCaseDTO);

  return aufCaseDTO;
 }
}

如您所见,一个变量使用 aufFall.getVersion(),另一个版本变量使用 aufFall.getFall().getVersion(),我无法在 MapStruct 中添加这两个变量因为它说它不允许重复。我怎样才能在 MapStruct 中做到这一点?

    @Mapping(target = "version", source = "aufFall.version")  
    @Mapping(target = "version", source = "aufFall.fall.version")

    @Mapping(target = "pksamAufFallDTO", source = "aufFall")
    AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR);

MapStruct 不支持在多个映射中使用相同的 target 属性。要实现您正在寻找的东西,您必须为其编写自己的方法。

例如

@Mapper
public interface MyMapper {

    @Mapping(target = "version", source = "aufFall", qualifiedByName = "aufFallToVersion")
    @Mapping(target = "pksamAufFallDTO", source = "aufFall")
    AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR);

    @Named("aufFallToVersion")
    default Integer toVersion(AufFall AufFall) {
        if (aufFall == null) {
            return null;
        }

        if (aufFall.getVersion() != null) {
            return aufFall.getVersion();
        } else if (aufFall.getFall() != null && aufFall.getFall().getVersion() != null) {
            return aufFall.getFall().getVersion();
        } else {
            return null;
        }
    }
}