Отображение иерархии сущностей в иерархию DTO с помощью Orika
Можно ли сопоставить объект с соответствующим ему DTO, когда оба принадлежат к иерархии классов?
Например: у меня есть BaseEntity
и немного ExtendedEntity1
.. ExtendedEntityN
С другой стороны у меня есть BaseDTO
и немного ExtendedDTO1
.. ExtendedDTON
Тогда у меня есть метод обслуживания:
public BaseDTO getById(String id) {
return orikaMapper.map(repository.findOne(id), BaseDTO.class);
}
Таким образом, я, очевидно, получаю всегда BaseDTO
, но я бы хотел сопоставить сущность с правильным типом DTO...
Есть ли способ добиться этого? Я бы не стал использовать switch
или же instanceof
проверить обходные пути...
1 ответ
Решение
Еще не найдено лучшего решения (если оно существует), поэтому я пойду по этому пути:
Map<Class<? extends BaseEntity>, Class<? extends BaseDTO>> dtoMappings;
Я определяю сопоставления Map
где я помещаю все ассоциации между организациями и DTO. Тогда в моем методе:
public BaseDTO getById(String id) {
BaseEntity e = repository.findOne(id);
return orikaMapper.map(repository.findOne(id), dtoMappings.get(e.getClass()));
}