У меня проблема с ModelMapper
Давайте представим, что у меня есть такая структура класса:
Поля MainModel: - ChildModel - (некоторые другие общие поля c)
Поля ChildModel: - Список - (некоторые другие общие c поля)
У меня есть структура DTO, которая выглядит точно так же (MainDTO, ChildDTO и GrandChildDTO). Преобразование работает нормально в обоих направлениях при нормальных условиях.
Однако у меня есть несколько ситуаций, когда я хочу прочитать MainModel с ChildModel из БД, не получая все объекты GrandChildModel из БД (LazyLoading сделает это здесь).
Для ModelMapper я добавил пользовательский ModelMapper, который имеет что-то вроде этого (примите его как псевдокод, я изменил название !!):
TypeMap<ChildModel, ChildDTO> typeMap = modelMapper.createTypeMap(ChildModel.class, ChildDTO.class);
typeMap.addMappings(mapper -> mapper.skip(ChildDTO::setGrandChildren));
Когда я создаю экземпляры ChildModel и преобразуйте их напрямую с моим экземпляром ModelMapper, они преобразуются просто отлично, GrandChildren пропускаются, как и ожидалось ...
Однако, если я выполняю сопоставление с MainModel -> MainDTO, ModelMapper НИКОГДА не использует добавленную мной пользовательскую конфигурацию. Я даже пытался добавить пользовательский конвертер для ChildModel-> ChildDTO вместо пропуска с TypeMap, это приводит к тому же результату. Я даже могу отладить и увидеть, что пользовательский конвертер для ChildModel никогда не вызывается, когда я конвертирую MainModel-> MainDTO, поэтому, похоже, ModelMapper использует для этого механизм преобразования внутреннего стандарта.
Есть ли способ, как я могу это исправить ? Это нормальное поведение ModelMapper?
Я знаю, что я мог бы просто вызвать setGrandChildren (null) в модели, поэтому отображение будет работать, но кажется несколько уродливым связываться с моделью (что в теории - не мое case-- может быть сохранен снова позже и будет сломан).