2016-07-27 30 views
0

Ich verwende MapStruct, um zwischen JPA-Entitäten und POJO-DTOs zu mappen.Warum enthält diese von MapStruct generierte Klasse keine import-Anweisung?

Alle meine Entitäten erweitern eine gemeinsame Basisklasse mit einem ID-Feld (a java.lang.Long).

Ich habe den folgenden abstrakten Mapper, der mir erlaubt, von der Beziehung in JPA zu einem einfachen langen Feld (oder Liste) in den DTOs abzubilden.

Eine Entität oder ein List<entity> Feld kann einem Long/List<Long> Feld zugeordnet werden, z.

@Mapper 
public abstract class EntityMapper { 

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

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

jedoch die erzeugte Implementierungsklasse umfasst nicht für die AbstractBaseEntity Klasse jede Import-Anweisung, obwohl es in der abstrakten Klasse ist, so dass der Code nicht kompiliert: User.groups könnte UserDTO.groupIds abgebildet werden

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

Warum ist das? Mache ich es falsch? Wie behebe ich das?

Ich verwende MapStruct 1.0.0.Final mit Java 8.

EDIT: Wenn ich eine abstrakte Methode hinzufügen, die die AbstractBaseEntity Klasse direkt verwendet, dann wird der Import hinzugefügt:

public abstract AbstractBaseEntityDTO entityToDTO(AbstractBaseEntity abstractBaseEntity); 

EDIT2 : schrieb das Problem auf MapStruct's Github: https://github.com/mapstruct/mapstruct/issues/844

Antwort