使用Mapstruct将Long ID转换为Set列表?

时间:2019-10-04 15:57:37

标签: spring-boot mapstruct

在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界面中创建一个方法,但是我不知道如何注入存储库,也不知道这是否是一个好习惯。

什么是最好的解决方法?

1 个答案:

答案 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);
}