У меня есть Entity и 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 с Entity, мне нужно сопоставить 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)».
Как сопоставить Long для Object, найдя Object в Репозиторий по идентификатору?