Как я могу отобразить поле DTO, которое не существует в сущности?Я приведу пример, у меня есть два основных класса.Класс DTO, как правило, класс бинов и класс сущностей JPA.Как вы уже догадались, я хочу сопоставить класс сущности с DTO.
@Entity
class Poll {
@Id
private Long id;
private String question;
private List<Choice> choices;
private User creator;
...
}
* Класс упрощен, его отображение JPA не имеет значения
class PollDTO {
private Long id;
private Long question;
private List<ChoiceDTO> choices;
private UserDTO creator;
private Long votes; // This field exists JUST in DTO class
...
}
Как видите, DTO содержит поле votes
, которого нет внутри сущности, поскольку голоса хранятся в виде отдельной сущности JPA.Таким образом, требуется установить значение вручную, скажем, путем извлечения его из voteService.getVotesForPoll(Long pollId)
.
Как я могу указать ModelMapper автоматически выбирать и применять это значение при сопоставлении Poll
с PollDTO
, используяmodelMapper.map(poll, PollDTO.class);
?
Я пробовал это с конвертером, и в основном это работает, но затем я должен сопоставить другое поле от Poll
до PollDTO
, и это указывает на отображение Choice
к ChoiceDTO
например вручную тоже ... Это мой подход к конвертеру ...
@Configuration
public class MapperConfig {
@Autowired private VoteService voteService;
@Bean
public ModelMapper modelMapper() {
ModelMapper mapper = new ModelMapper();
mapper.addConverter(toPollDTO());
return mapper;
}
private Converter<Poll, PollDTO> toPollDTO() {
return context -> {
Poll poll = context.getSource();
PollDTO dto = context.getDestination();
dto.setVotes(voteService.getVotesForPoll(poll.getId()));
// But this required mapping other fields manually too or they will be blank
return dto;
};
}
}
* Если вас интересуют какие-то аннотации, я использую Spring Framework прямотеперь, для этого вопроса не имеет значения