У меня есть родитель с коллекцией детей, которую я хочу отобразить.
Parent -> Collection<Child> children
ParentDTO -> Collection<ChildDTO> childDTOs
Из DTO в Домен. Мне нужен вызов поиска в базе данных: у меня есть сервисный метод, который ищет дочерний элемент по его идентификатору:
Child getChild(Long id)
Теперь в родительском dtoToDomain (parentDTO) я хочу, чтобы mapstruct выполнила поиск для каждого элемента в коллекции.
Это решение работает для single-occ, mapstruct может найти getChild в сервисе и записывает действие поиска:
@Mapper(uses = ChildService.class)
public interface ParentMapper {
@Mapping(source="child.id", target="child")
Parent dtoToDomain(ParentDTO parentDTO);
}
Однако для коллекции мне нужно указать конкретный метод для отображения коллекции, но что я должен добавить в @Mapping? Как то так?
@Mapping(source="child.id", target="child")
Collection<Child> dtoToDomain(Collection<ChildDTO> children)
Я не вижу, как я могу написать реализацию по умолчанию, так как мне нужен сервис, который автоматически подключается реализацией.
Я мог бы представить себе это решение: дочерний маппер, где я переопределяю метод Dto to Domain с помощью вида, подобного этому:
@Mapper(uses = ChildMapper.class)
public interface ParentMapper {
Parent dtoToDomain(ParentDTO parentDTO);
}
@Mapper(uses = ChildService.class)
public interface ChildMapper {
@Mapping(source="id", target="")
Child dtoToDomain(ChildDTO child);
}
Но цель обязательна в mapstruct. Может быть, я могу как-то указать весь объект как цель?