【问题标题】:MapStruct inheritance and calling "this"MapStruct 继承和调用“this”
【发布时间】:2021-12-08 14:54:02
【问题描述】:

我有一个非规范化数据库和一个包含多个类的域模型。例如

class BMW {
  EngineConfiguration engineConfiguration;
  ModelMetadata modelMetadata;
  BodyConfiguration bodyConfiguration;
}

class CarsEntity{
  String modelName;
  Integer year...
  //etc. all fields, in same class
}

我想为 EngineConfiguration、ModelMetadata 和 BodyConfiguration 编写 MapStruct 映射器,然后将它们全部整合到一个映射器中。示例

@Mapper(componentModel = "spring")
class EngineConfigurationMapper {
  
  @Mapping(... specific fields mapping goes here)
  EngineConfiguration mapToDomain(CarsEntity carsEntity);
}

@Mapper(componentModel = "spring", uses = {EngineConfigurationMapper.class , ...})
class BMWMapper {
  BMW mapToDomain(CarsEntity carsEntity);
}

问题是我的映射器默认不工作,BMWMapper 没有对其他映射器的调用,我尝试过像expression="(engineConfigurationMapper.mapToDomain(this))" target = "engineConfiguration) 一样调用this 的表达式,但映射器不包含在实现中。 我怎样才能做到这一点? P.S.:MapperConfig 也没用

【问题讨论】:

    标签: java spring mapstruct


    【解决方案1】:

    我猜你说this是指源实体,即carsEntity

    Mapping#source中可以使用源参数名,表示可以进行如下操作:

    @Mapper(componentModel = "spring", uses = {EngineConfigurationMapper.class , ...})
    class BMWMapper {
    
      @Mapping( target = "engineConfiguration", source = "carsEntity")
      @Mapping( target = "modelMetadata", source = "carsEntity")
      @Mapping( target = "bodyConfiguration", source = "carsEntity")
      BMW mapToDomain(CarsEntity carsEntity);
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      相关资源
      最近更新 更多