spring - MapStruct:如何制作从 Long 到 Object 的映射方法?
问题描述
我有一个实体和 DTO。
@Entity
@Data
public class GroupParameter {
@Id
@GeneratedValue(generator = ID_GENERATOR)
private Long id;
private String title;
private boolean common;
@ManyToOne
@JoinColumn(name = "TYPE_REPORT_ID", nullable = false)
private TypeReport typeReport;
}
@Data
public class GroupParameterIdDTO extends GroupParameterAbstract {
private Long typeReportId;
}
当我从 DTO 映射到实体时,我需要将 Long typeReportId 映射到 TypeReport typeReport。
我尝试这样做:
@Mapper(componentModel = "spring")
public abstract class GroupParameterMapper {
@Autowired
private TypeReportService typeReportService;
@Mapping(target = "typeReport", source = "typeReportId", qualifiedByName = "fromLongToTypeReport")
public abstract GroupParameter fromGroupParameterIdDTO(GroupParameterIdDTO groupParameterIdDTO);
@Named("fromLongToTypeReport")
private TypeReport fromLongToTypeReport(Long typeReportId) throws EntityNotFoundException {
return typeReportService.findById(typeReportId);
}
}
但我得到错误:
错误:(23,5)java:无法将属性“java.lang.Long typeReportId”映射到“ru.watchlist.domain.TypeReport typeReport”。考虑声明/实现一个映射方法:“ru.watchlist.domain.TypeReport map(java.lang.Long value)”。
如何通过 Id 在存储库中查找对象来将 Long 映射到对象?
解决方案
限定符中使用的所有方法都必须可供实现类访问。目前,fromLongToTypeReport
是私有的。你应该成功package-protected
,protected
否则public
它会起作用。
在侧节点上,您不必使用限定符来映射Long
和TypeRecord
。您可以只定义这样的方法,MapStruct 就可以进行映射。
@Mapper(componentModel = "spring")
public abstract class GroupParameterMapper {
@Autowired
private TypeReportService typeReportService;
@Mapping(target = "typeReport", source = "typeReportId")
public abstract GroupParameter fromGroupParameterIdDTO(GroupParameterIdDTO groupParameterIdDTO);
protected TypeReport fromLongToTypeReport(Long typeReportId) throws EntityNotFoundException {
return typeReportService.findById(typeReportId);
}
}
推荐阅读
- python - 从 wheel 安装密码学 2.2.1 或更高版本
- datatable - 数据表和 Yadcf。类型错误:oTable 未定义
- c# - C# 属性。“如果(值是双倍)”始终为真
- json - 将 JSON Plus JSON Schema 转换为原始 HTML?
- python - 使用 Python、Phpmyadmin、“SELECT”中的问题登录身份验证
- behat - behat文档和真实生活之间的差异。怎么了?
- python - 瓶子的 before_request 钩子有执行顺序吗?
- java - 即使条件为假,为什么 for 循环仍在运行
- javascript - Node/Express Post请求使用函数发送数据
- python - 根据长度列表创建新变量