在Mapstruct界面中,如何将id转换为Set
我尝试如下,但由于发生错误而未能成功:
@Mapper(componentModel = "spring", uses = {UserSystemService.class})
public interface CompanyPostMapper extends EntityMapper<CompanyPostDTO, Company> {
@Mapping(source = "userSystemId", target = "userSystems", expression = "java(userSystemService.findByIdAndAddToSet(id))")
Company toEntity(CompanyPostDTO dto);
default Company fromId(Long id) {
if (id == null) {
return null;
}
Company company = new Company();
company.setId(id);
return company;
}
}
我不知道我是否正确理解了“ uses”参数的用法,但基本上我想获取ID并查询寄存器,并返回带有寄存器的Set。
我打算尝试“ qualifiedByName”并在Mapper界面中创建一个方法,但是我不知道如何注入存储库,也不知道这是否是一个好习惯。
什么是最好的解决方法?
答案 0 :(得分:0)
MapStruct是一个映射框架。您正在映射内部进行查找。当然可以(请参阅使用@Context
的JPA映射示例)。但是您不能同时继承EntityMapper<CompanyPostDTO, Company>
。
通常,您需要在映射逻辑之外进行查找,并使用更新方法来更新对象。
您的映射将如下所示:
@Mapper(componentModel = "spring" )
public interface CompanyPostMapper {
void updateEntity(CompanyPostDTO dto, @MappingTarget Company entity);
}
// and your call would look like:
public class CallingService{
Company company = userSystemService.findByIdAndAddToSet(id));
if (company == null) {
company = new Company();
}
companyPostMapper.updateEntity(dto, company);
}