根据方法参数进行条件映射



我有这个jpa:

public class CandidateRecommendationJpa extends AuditingEntityJpa {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID_CANDIDATO_RECOMENDACION", nullable = false)
private Integer id;
@ManyToOne
@JoinColumn(name = "ID_CANDIDATO_EMISOR", nullable = false)
private CandidateJpa candidateSender;
@ManyToOne
@JoinColumn(name = "ID_CANDIDATO_RECEPTOR", nullable = false)
private CandidateJpa candidateReceiver;
}

我必须映射到这个实体:

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@EqualsAndHashCode
public class CandidateRecommendation {
private Integer id;   
private Candidate candidate;
}

映射器:

@Mapper(componentModel = "spring")
public interface CandidateRecommendationJpaMapper {
CandidateRecommendationJpaMapper INSTANCE = Mappers.getMapper(CandidateRecommendationJpaMapper.class);
@Mapping(target = "candidate.id", source = "candidateSender.id")
@Mapping(target = "candidate.name", source = "candidateSender.name")
@Mapping(target = "candidate.login", source = "candidateSender.employee.login")
CandidateRecommendation toModel(CandidateRecommendationJpa jpa);
List<CandidateRecommendation> toModels(List<CandidateRecommendationJpa> jpa);
}

我必须指定jpa属性映射,是否有一种方法映射jpa属性与参数方法?例如,在这种情况下,我映射与候选数据发送者但是,我如何映射与候选数据接收器?

@Mapping(target = "candidate.id", source = "candidateReceiver.id")
@Mapping(target = "candidate.name", source = "candidateReceiver.name")
@Mapping(target = "candidate.login", source = "candidateReceiver.employee.login")
CandidateRecommendation toSenderModel(CandidateRecommendationJpa jpa);
List<CandidateRecommendation> toSenderModels(List<CandidateRecommendationJpa> jpa);

显示以下错误:

Ambiguous mapping methods found for mapping collection element to CandidateRecommendation: CandidateRecommendation toModel(CandidateRecommendationJpa jpa), CandidateRecommendation toSenderModel(CandidateRecommendationJpa jpa)

问题是:

List<CandidateRecommendation> toSenderModels(List<CandidateRecommendationJpa> jpa);

不知道该使用哪种映射方法,因为有两种方法:

  • toModel
  • toSenderModel

要解决这个问题,您需要执行以下操作:

@Mapper(componentModel = "spring")
public interface CandidateRecommendationJpaMapper {
CandidateRecommendationJpaMapper INSTANCE = Mappers.getMapper(CandidateRecommendationJpaMapper.class);
@Named("toModel")
@Mapping(target = "candidate.id", source = "candidateSender.id")
@Mapping(target = "candidate.name", source = "candidateSender.name")
@Mapping(target = "candidate.login", source = "candidateSender.employee.login")
CandidateRecommendation toModel(CandidateRecommendationJpa jpa);
@Named("toSenderModel")
@Mapping(target = "candidate.id", source = "candidateReceiver.id")
@Mapping(target = "candidate.name", source = "candidateReceiver.name")
@Mapping(target = "candidate.login", source = "candidateReceiver.employee.login")
CandidateRecommendation toSenderModel(CandidateRecommendationJpa jpa);
@IterableMapping(qualifiedByName = "toModel")
List<CandidateRecommendation> toModels(List<CandidateRecommendationJpa> jpa);
@IterableMapping(qualifiedByName = "toSenderModel")
List<CandidateRecommendation> toSenderModels(List<CandidateRecommendationJpa> jpa);
}

如你所见,我添加了@Named和@IterableMapping。

最新更新