Reputation: 83
I have this 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;
}
And I have to mapper with this entity:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@EqualsAndHashCode
public class CandidateRecommendation {
private Integer id;
private Candidate candidate;
}
Mapper:
@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);
}
Problem
I have to specify jpa atribute to map, is there a way to map a jpa attribute with a param method? For example, in this case I map with candidateSender but, how I can map with candidateReceiver?
@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);
This show the following error:
Ambiguous mapping methods found for mapping collection element to CandidateRecommendation: CandidateRecommendation toModel(CandidateRecommendationJpa jpa), CandidateRecommendation toSenderModel(CandidateRecommendationJpa jpa)
Upvotes: 0
Views: 228
Reputation: 1675
The problem is that:
List<CandidateRecommendation> toSenderModels(List<CandidateRecommendationJpa> jpa);
doesn't know which mapping method to use because there are two of them:
So to solve that, you need to do the following:
@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);
}
As you can see, I added @Named and @IterableMapping.
Upvotes: 3