user2869612
user2869612

Reputation: 619

modelmaper for nested collection

I am having Company entity with set of branches. When I convert entity into DTO, I also want to convert set of branches into into set of BranchDTO using modelmapper.

My entities:

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;
    ...
}

I want to transfer this entity into CompanyDTO along with collection of BranchDTO

My DTOs:

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;
    ...
}

I tried using property map - but could not figure out exact syntax. Following gives be blank BranchDTO list.

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

Any help is greatly appreciated.

Upvotes: 2

Views: 3659

Answers (1)

Pau
Pau

Reputation: 16086

ModelMapper can convert a List<> to Set<> so really you don't need to do any configuration. Furhtermore, the properties are called equal and in the same order it should work.


I've tried and it works perfectly:

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);

Output:

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

So check the Set: Branch elements are empty or not because modelmapper seems to work.

Upvotes: 1

Related Questions