如何使用映射器和 DTO 在 Jhipster 中获取整个实体?

How to get a whole entity in Jhipster using mappers and DTOs?

我是 mapstruct 的新手,有几个问题找不到答案。

我有一个 Entity1(对象),它与 Entity2 有 Many2Many 关系。在这种情况下,我的 Entity1DTO 可以使用 Set:

从 Entity1 获取所有数据 (Swagger)
    private Set<Entity2DTO> appusers = new HashSet<>();

该集合包含有关所有 Entity2DTO 对象的所有信息。

然后,我有另一个 Entity3 与 Entity1 有关系 (One2Many)。当我想获取所有与 Entity3 (One2Many) 相同的信息时,它只带来了 Entity3 的 ID,其余属性为空。

    private Entity3DTO entity3;

映射器:

@Mapping(target = "entity3", source = "entity3", qualifiedByName = "id")
Entity3DTO toDto(Entity3 s);

如果我更改映射器并不仅包括 id,还包括其他属性(它会起作用),但我想问一下是否有更简单或更直接的方法将 DTO 或映射器更改为带上剩下的数据,有没有?

而且...为什么它在 Set 的情况下带来了所有数据,而在其他情况下却没有?

MapStruct documentation is 不够清楚,所以如果你有任何其他 Jhipster 的例子那就太好了。

感谢您的帮助。

我不确定我是否理解正确,但我猜你的问题是你希望 Entity1Mapper 映射嵌套 Entity3 的所有属性,而不仅仅是它的 id.

在您的 Entity1Mapper.java 中,更改为:

@Mapping(target = "entity3", source = "entity3", qualifiedByName = "id")
Entity1DTO toDto(Entity1 s);

进入这个:

@Mapping(target = "entity3", source = "entity3")
Entity1DTO toDto(Entity1 s);

通过这种方式,您告诉 MapStruct 使用完整的 toDto(...) 映射方法,而不是仅填充对象 ID 的 toDtoId(...)

示例项目

我已经生成了一个小的 JHipster 7.0.1 项目来重现并解决您的问题。

这是 JDL:

entity Entity1
entity Entity2
entity Entity3 { name String }

relationship ManyToMany { Entity1 to Entity2 }
relationship OneToMany { Entity3 to Entity1 }

dto all with mapstruct

使用新生成的项目,您可以启动它并转到 Entity1 主页并编辑第一个以添加 Entity3.如果您检查刚刚编辑的 Entity1 的详细信息页面中的 GET 调用,您会看到 Entity3 只有一个 ID(注意名称是如何 NULL)正如预期的那样。

{
  "id" : 1,
  "entity2s" : [ {
    "id" : 1
  } ],
  "entity3" : {
    "id" : 1,
    "name" : null
  }
}

然后转到Entity1Mapper.java并删除entity3映射中的, qualifiedByName = "id"部分。像这样:

之前:

    @Mapping(target = "entity2s", source = "entity2s", qualifiedByName = "idSet")
    @Mapping(target = "entity3", source = "entity3", qualifiedByName = "id")
    Entity1DTO toDto(Entity1 s);

之后:

    @Mapping(target = "entity2s", source = "entity2s", qualifiedByName = "idSet")
    @Mapping(target = "entity3", source = "entity3")
    Entity1DTO toDto(Entity1 s);

等待服务器端重新编译并重新加载页面,就可以了:

{
  "id" : 1,
  "entity2s" : [ {
    "id" : 1
  } ],
  "entity3" : {
    "id" : 1,
    "name" : "Incredible Account"
  }
}