繁体   English   中英

使用 MapStruct 映射到 SpringBoot 中的 DTO 双向实体

[英]Mapping to DTO bidirectional entities in SpringBoot with MapStruct

我在 Spring Boot 中有一个双向映射:

公司.class

...
private Integer id;
private String nameC;
@OneToMany
private List<Employee> employees;
...

员工.class

...
private Integer id;
private String nameE;
@ManyToOne
private Company company;
...

现在我想用 map 结构映射到这些 DTO

公司DTO

private Integer id;
private String nameC;
private List<EmployeeDTO> employees;

员工DTO

private Integer id;
private String nameE;
private Integer company; // so this should be Company ID

地图公司

Company toCompany(CompanyDTO cDto)

CompanyDTO toCompanyDTO(Company c)

地图员工

Employee toEmployee(EmployeeDTO eDto)

EmployeeDTO toEmployeeDTO(Employee emp)

@Mapping(target = "company.id", source = "eDto.company")
List<Employee> toEmployee(List<EmployeeDTO> eDto)

@Mapping(target = "company", source = "emp.company.id")
List<EmployeeDTO> toEmployeeDTO(List<Employee> emp)

现在,

  1. 首先,我无法获取 toEmployee 和 toEmployeeDTO 的映射,错误显示“参数类型“eDto”没有名为“company”的属性”和“参数类型“emp”没有名为“emp.company”的属性.id"" 我想这是因为 eDto 和 emp 是 List<>。 那么如何从 MapStruct 中的 List<> 获取“company”参数呢?
  2. 后来,即使我去掉那些带列表的映射,也有问题,因为它是双向关系,我无法在 EmployeeDTO 中获取 CompanyId。 错误是“为映射属性“Company company”找到的模糊映射方法”有没有办法在 MapStruct 中执行此操作,或者我必须使用自定义映射器?

尝试这个

@Named("toEmployee")
Employee toEmployee(EmployeeDTO eDto)

@Named("toEmployeeDTO")
EmployeeDTO toEmployeeDTO(Employee emp)

@IterableMapping(qualifiedByName = "toEmployee")
List<Employee> toEmployee(List<EmployeeDTO> eDto)

@IterableMapping(qualifiedByName = "toEmployeeDTO")
List<EmployeeDTO> toEmployeeDTO(List<Employee> emp)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM