嵌套集合的模型映射器

modelmaper for nested collection

我有公司实体和分支机构。当我将实体转换为 DTO 时,我还想使用 modelmapper 将分支集转换为 BranchDTO 集。

我的实体:

public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "company_id")
    private long companyId;

    @Column(name = "company_name")
    private String companyName;

    @Column(name = "address")
    private String address;

    @OneToMany
    @JoinColumn(name="branchcompany_id", referencedColumnName="company_id")
    private Set<Branch> branches;

    ...getters setters..

 }

public class Branch {   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "branch_id")
    private long branchId;

    @Column(name = "branch_name")
    private String branchName;
    ...
}

我想将此实体连同 BranchDTO

的集合一起转移到 CompanyDTO

我的 DTO:

public class CompanyDTO {
    private long companyId;

    private String companyName;

    private String address;

    private List<BranchDTO> branches;
    ...
}


public class BranchDTO {
    private long branchId;

    private String branchName;
    ...
}

我尝试使用 属性 地图 - 但无法弄清楚确切的语法。以下给出空白 BranchDTO 列表。

CompanyDTO newCompanyDTO = modelMapper.map(company, CompanyDTO.class);

非常感谢任何帮助。

ModelMapper 可以将 List<> 转换为 Set<>,因此您实际上不需要进行任何配置。此外,这些属性被称为相等的,并且按照它应该工作的相同顺序。


我试过了,效果很好:

Company company = new Company();
Branch branch = new Branch();
branch.setBranchId(1L);
branch.setBranchName("Branch Name");
company.setBranches(new HashSet<>(Arrays.asList(branch)));
company.setAddress("Address");
company.setCompanyId(10L);
company.setCompanyName("Company Name");

ModelMapper mapper = new ModelMapper();
CompanyDTO companyDto = mapper.map(company, CompanyDTO.class);

System.out.println(companyDto);

输出

CompanyDTO(companyId=10, companyName=Company Name, address=Address, branches=[BranchDTO(branchId=1, branchName=Branch Name)])

因此检查 SetBranch 元素是否为空,因为 modelmapper 似乎有效。