2016-07-27 7 views
0

Я использую MapStruct для сопоставления сущностей JPA и POJO DTO.Почему этот сгенерированный класс MapStruct не содержит оператор импорта?

Все мои сущности расширяют общий базовый класс, который имеет поле идентификатора (java.lang.Long).

У меня есть следующий абстрактный mapper, который позволяет мне отображать отношения из JPA в простое длинное поле (или список) в DTO.

Предприятие или поле List<entity> могут быть отображены в поле Long/List<Long>, например. User.groups может быть сопоставлен UserDTO.groupIds:

@Mapper 
public abstract class EntityMapper { 

    public Long entityToLongId(AbstractBaseEntity entity){ 
     return entity.getId(); 
    } 

    public abstract List<Long> entityCollectionToLongIdList(Collection<? extends AbstractBaseEntity> entities); 
} 

Однако генерируемый класс реализации не включает оператор импорта для AbstractBaseEntity класса, хотя он присутствует в абстрактном классе, так что код не компилируется:

package ....; 

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.List; 
import javax.annotation.Generated; 
import org.springframework.stereotype.Component; 

@Generated(
    value = "org.mapstruct.ap.MappingProcessor", 
    date = "2016-07-27T12:11:25+0200", 
    comments = "version: 1.0.0.Final, compiler: javac, environment: Java 1.8.0_66 (Oracle Corporation)" 
) 
@Component 
public class EntityMapperImpl extends EntityMapper { 

    @Override 
    public List<Long> entityCollectionToLongIdList(Collection<? extends ch.unine.tango.model.AbstractBaseEntity> entities) { 
     if (entities == null) { 
      return null; 
     } 

     List<Long> list = new ArrayList<Long>(); 
     for (AbstractBaseEntity abstractBaseEntity : entities) { // compilation error here ! 
      list.add(entityToLongId(abstractBaseEntity)); 
     } 

     return list; 
    } 
} 

Почему? Я делаю это неправильно? Как это исправить?

Я использую MapStruct 1.0.0.Final с Java 8.

EDIT: Если добавить абстрактный метод, который использует AbstractBaseEntity класс непосредственно, то импорт добавлен:

public abstract AbstractBaseEntityDTO entityToDTO(AbstractBaseEntity abstractBaseEntity); 

edit2 : разместил вопрос на Github MapStruct: https://github.com/mapstruct/mapstruct/issues/844

ответ