gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:41:43 24 4
gpt4 key购买 nike

我是 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"
}
}

关于jhipster - 如何使用映射器和 DTO 在 Jhipster 中获取整个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68001179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com