3 个表 A、B 和一个参考表状态,其中包含 status_code 列,用于获取描述和类型等详细信息。使用 Springboot 3.2.5 和 JPA 以及
<mapstruct.version>1.5.5.Final</mapstruct.version>
<lombok-mapstruct-binding>0.2.0</lombok-mapstruct-binding>
使用 AEntity 和 BEntity 及其各自的 DTO 为 A 和 B 定义映射器。这些类中的每一个都包含状态字段,该字段是状态表中的 FK。如何定义状态映射器,以便映射器返回状态对象的 DTO 中给定状态代码的存储库中存在的实体?
映射器也可以以抽象类而不是接口的形式定义,并直接在映射器类中实现自定义方法。在这种情况下,MapStruct 将生成抽象类的扩展,其中包含所有抽象的实现https://mapstruct.org/documentation/stable/reference/html/#sub-class-mappings
所以粗略的代码可能是
@Mapper(componentModel = "spring)
public abstract class EntityToModelMapper {
@Autowired EntityRepository entityRepository;
@Mapping(target = "status", expression = "java(map(arg))")
public abstract Model convert(Entity arg);
StatusType map(Entity entity) {
// use repository here and return status or throw exception
}
}