当前位置: 首页 > 知识库问答 >
问题:

将Mapstruct上下文包含到内部映射器中

宓英哲
2023-03-14

然而,编译阶段(生成实现)花费了很多时间(只有20个文件,大约15分钟,我需要包含更多的文件)。

我无法“重用”现有映射器,因为我无法“发送”使用以下内容的上下文:

@Mapper(uses=B_Mapper.class)
A_Mapper ...

那么,是否有一个优化选项来减少所需的时间量呢?是否有一种方法将上下文传递到“内部映射器”(在上面的示例B_Mapper中)中?

public class EntityA {
  ...
  @OneToMany(mappedBy="entityA")
  private List<EntityB> entitiesB;
  ...
}

public class EntityB {
  ...
  @ManyToOne
  private EntityA entityA;
  ...
}
public class DtoA { 
  ...
  private List<DtoB> dtosB;
  ...
}

public class DtoB { 
  ...
  private DtoA dtoA;
  ...
}

在几个实体/DTO中有更多的“列和双向关系”。

转换器:

public interface BaseConverter<D, E> {

  E fromDtoToEntity(final D dto, @Context CycleAvoidingMappingContext context);

  // This is the method I really use for the conversions
  @Named("originalFromDtoToEntity")
  default E fromDtoToEntity(final D dto) {
    return fromDtoToEntity(dto, new CycleAvoidingMappingContext());
  }
  ...
}

@Mapper
public interface AConverter extends BaseConverter<DtoA, EntityA>{}

@Mapper
public interface BConverter extends BaseConverter<DtoB, EntityB>{}

共有1个答案

岳阳文
2023-03-14

看看您的转换器,这意味着如果您使用它们,就已经传递了cycleAvaidingContext。例如:

@Mapper(uses = BConverter.class, componentModel = "spring")
public interface AConverter extends BaseConverter<DtoA, EntityA>{}

@Mapper(uses = AConverter.class, componentModel = "spring")
public interface BConverter extends BaseConverter<DtoB, EntityB>{}

然后,在调用它时,MapStruct将正确地调用FromdTotoEntity,并在那里传递CycleAvaidingContext

请记住springcomponentmodel,由于映射器之间的循环依赖关系,不能使用默认值。

 类似资料:
  • 例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?

  • 当前有包含内部映射器的映射器(有时,它们本身包含其他内部映射器)。

  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好

  • 我使用http://jsonlint.com来验证JSON是否有效。因此,我要么需要更改JSON或代码,要么可能两者都需要。有什么想法吗?

  • 下面是我的DTO。 源DTO 目标DTO

  • 我正试着从Protobuf映射到POJO。以下是POJO: 其中如下: 这是协议: 你明白了。 现在的问题是MapStruct没有映射Protobuf中重复的字段,因为生成的Java文件中这些字段的getter是name xxx list。例如,从UpsertNodeAllDataInput获取表的方法是输入。getTablesList()而不是输入。getTables(),显然MapStruct