嵌套集合的模型映射器
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)])
因此检查 Set
:Branch
元素是否为空,因为 modelmapper
似乎有效。
我有公司实体和分支机构。当我将实体转换为 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)])
因此检查 Set
:Branch
元素是否为空,因为 modelmapper
似乎有效。