2016-07-27 1 views
0

J'utilise MapStruct pour mapper les entités JPA et les POTO de POJO.Pourquoi cette classe générée par MapStruct n'inclut pas d'instruction d'importation?

Toutes mes entités étendent une classe de base commune qui a un champ ID (java.lang.Long).

J'ai le mappeur abstrait suivant, qui me permet de mapper de la relation dans JPA à un champ long simple (ou Liste) dans les DTO.

Un champ entité ou List<entity> peut être mappé à un champ Long/List<Long>, par ex. User.groups pourrait être mis en correspondance UserDTO.groupIds:

@Mapper 
public abstract class EntityMapper { 

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

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

Cependant, la classe d'implémentation générée ne comprend aucune instruction d'importation pour la classe AbstractBaseEntity, bien qu'il soit présent dans la classe abstraite, de sorte que le code ne compile pas:

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; 
    } 
} 

Pourquoi est-ce? Est-ce que je le fais mal? Comment régler ceci ?

J'utilise MapStruct 1.0.0.Final avec Java 8.

EDIT: Si j'ajoute une méthode abstraite qui utilise la classe directement AbstractBaseEntity, l'importation est ajouté:

public abstract AbstractBaseEntityDTO entityToDTO(AbstractBaseEntity abstractBaseEntity); 

EDIT2 : a signalé le problème sur Github de MapStruct: https://github.com/mapstruct/mapstruct/issues/844

Répondre