Я использую MapStruct 1.3.0.Final для преобразования Dtos в POJO и наоборот со значением spring в mapstruct.defaultComponentModel .Чтобы избежать ошибок переполнения стека из-за двунаправленных отношений, я перешел по следующей ссылке:
Отображение с циклами
Однако фаза компиляции (для генерации реализаций) принимаетмного времени (всего 20 файлов за 15 минут, и мне нужно включить больше).
Я не могу "повторно использовать" существующие средства отображения, потому что я не могу "отправить" тогда контекст, используя:
@Mapper(uses=B_Mapper.class)
A_Mapper ...
Итак, есть ли возможность оптимизации, чтобы сократить количество требуемого времени?Есть ли способ передать контекст во «внутренние сопоставители» (в приведенном выше примере B_Mapper )?
UPDATE
То естьскелет приложения:
public class EntityA {
...
@OneToMany(mappedBy="entityA")
private List<EntityB> entitiesB;
...
}
public class EntityB {
...
@ManyToOne
private EntityA entityA;
...
}
DTO:
public class DtoA {
...
private List<DtoB> dtosB;
...
}
public class DtoB {
...
private DtoA dtoA;
...
}
В нескольких сущностях / dtos существует еще много "столбцов и двунаправленных отношений".
Конвертер:
public interface BaseConverter<D, E> {
E fromDtoToEntity(final D dto, @Context CycleAvoidingMappingContext context);
// This is the method I really use for the conversions
@Named("originalFromDtoToEntity")
default E fromDtoToEntity(final D dto) {
return fromDtoToEntity(dto, new CycleAvoidingMappingContext());
}
...
}
@Mapper
public interface AConverter extends BaseConverter<DtoA, EntityA>{}
@Mapper
public interface BConverter extends BaseConverter<DtoB, EntityB>{}