Jor*_*res 3 jhipster mapstruct
我是 mapstruct 的新手,有几个问题无法找到答案。
我有一个 Entity1 (对象),它与 Entity2 具有 Many2Many 关系。在这种情况下,我的 Entity1DTO 可以使用 Set 从 Entity1 获取所有数据 (Swagger):
private Set<Entity2DTO> appusers = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)
该 Set 包含有关所有 Entity2DTO 对象的所有信息。
然后,我有另一个与 Entity1 具有关系 (One2Many) 的 Entity3。当我想获取与Entity3(One2Many)所有相同的信息时,它只带来Entity3的ID,其余属性为空。
private Entity3DTO entity3;
Run Code Online (Sandbox Code Playgroud)
映射器:
@Mapping(target = "entity3", source = "entity3", qualifiedByName = "id")
Entity3DTO toDto(Entity3 s);
Run Code Online (Sandbox Code Playgroud)
如果我更改映射器并不仅包括 id,还包括其他属性(它将起作用),但我想问是否有更简单或更直接的方法来更改 DTO 或映射器以将其余的数据,有吗?
而且...为什么它会在 Set 的情况下带来所有数据,而在其他情况下则不会?
MapStruct 文档不够清晰,所以如果您有 Jhipster 的任何其他示例,那就太好了。
感谢您的帮助。
我不确定我是否理解正确,但我猜你的问题是你想Entity1Mapper映射嵌套的所有属性Entity3而不仅仅是它的id.
在你的 中Entity1Mapper.java,改变这个:
@Mapping(target = "entity3", source = "entity3", qualifiedByName = "id")
Entity1DTO toDto(Entity1 s);
Run Code Online (Sandbox Code Playgroud)
进入这个:
@Mapping(target = "entity3", source = "entity3")
Entity1DTO toDto(Entity1 s);
Run Code Online (Sandbox Code Playgroud)
这样,您就可以告诉 MapStruct 使用完整的toDto(...)映射方法,而不是toDtoId(...)仅填充对象 ID。
我生成了一个小型 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
Run Code Online (Sandbox Code Playgroud)
使用新生成的项目,您可以启动它并转到Entity1主页并编辑第一个页面以添加Entity3。如果您检查刚刚编辑的Entity1GET的详细信息页面中的调用,您将看到Entity3仅具有预期的(注意名称的含义)。IDNULL
entity Entity1
entity Entity2
entity Entity3 { name String }
relationship ManyToMany { Entity1 to Entity2 }
relationship OneToMany { Entity3 to Entity1 }
dto all with mapstruct
Run Code Online (Sandbox Code Playgroud)
然后去Entity1Mapper.java并删除, qualifiedByName = "id"的映射中的部分entity3。就像这样:
前:
{
"id" : 1,
"entity2s" : [ {
"id" : 1
} ],
"entity3" : {
"id" : 1,
"name" : null
}
}
Run Code Online (Sandbox Code Playgroud)
后:
@Mapping(target = "entity2s", source = "entity2s", qualifiedByName = "idSet")
@Mapping(target = "entity3", source = "entity3", qualifiedByName = "id")
Entity1DTO toDto(Entity1 s);
Run Code Online (Sandbox Code Playgroud)
等待服务器端重新编译并重新加载页面,就可以了:
@Mapping(target = "entity2s", source = "entity2s", qualifiedByName = "idSet")
@Mapping(target = "entity3", source = "entity3")
Entity1DTO toDto(Entity1 s);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |