使用mapstruct将DTO中的DTO映射到实体中的实体

时间:2017-04-20 11:32:26

标签: jhipster mapstruct

我有一种情况,我在DTO内部有另一个DTO,我必须将其映射到相应的实体。

我正在使用mapstruct,我已经有了AnotherEntityMapper。

DTO

public class EntityDTO {

   private AnotherEntityDTO anotherEntityDTO;
   // other fields
}
Entity

@Entity
public class Entity {
  private AnotherEntity anotherEntity;
  // other fields
}

如何更改EntityMapper界面,以便我可以将anotherEntityDTO映射到anotherEntity?

感谢。

1 个答案:

答案 0 :(得分:3)

这实际上取决于您使用的是哪个版本的MapStruct。如果您使用1.2.0.Beta或更高版本,则可以在EntityMapper界面上定义嵌套属性:

@Mapper
public interface EntityMapper {

    @Mapping(target = "anotherEntity", source = "anotherEntityDTO")
    @Mapping(target = "anotherEntity.propE", source = "anotherEntityDTO.propD")
    Entity map(EntityDDTO dto);

}

另一个选项(如果您使用的版本低于1.2.0.Beta则必须使用)是在EntityMapper中添加一个新方法,如:

@Mapper
public interface EntityMapper {

    @Mapping(target = "anotherEntity", source = "anotherEntityDTO")
    Entity map(EntityDDTO dto);

    @Mapping(target = "propE", source = "propD")
    AnotherEntity map(AnotherEntityDTO);
}

或者您可以为AnotherEntityMapper定义新的Mapper AnotherEntity并使用@Mapper(uses = {AnotherEntityMapper.class})

@Mapper
public interface AnotherEntityMapper {

    @Mapping(target = "propE", source = "propD")
    AnotherEntity map(AnotherEntityDTO);
}

@Mapper(uses = {AnotherEntityMapper.class}
public interface EntityMapper {

    @Mapping(target = "anotherEntity", source = "anotherEntityDTO")
    Entity map(EntityDDTO dto);
}

这实际上取决于您的使用案例。如果您需要在其他地方AnotherEntityAnotherEntityDTO之间进行映射,我建议您使用新界面,以便在需要时重复使用