2016-07-27 35 views
0

我正在使用MapStruct在JPA實體和POJO DTO之間進行映射。爲什麼MapStruct生成的類不包含import語句?

我所有的實體都擴展了一個具有ID字段的公共基類(java.lang.Long)。

我有以下抽象映射器,它允許我從JPA中的關係映射到DTO中的簡單長字段(或列表)。

一個實體或List<entity>字段可以被映射到一個字段,例如字段。 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類中的任何import語句,雖然它是存在於抽象類,所以代碼不能編譯:

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

編輯:如果我補充一點,直接使用AbstractBaseEntity類的抽象方法,那麼進口增加:

public abstract AbstractBaseEntityDTO entityToDTO(AbstractBaseEntity abstractBaseEntity); 

EDIT2 :在MapStruct的Github上發佈了這個問題:https://github.com/mapstruct/mapstruct/issues/844

回答

相關問題