首页 文章

为什么这个MapStruct生成的类不包含import语句?

提问于
浏览
1

我正在使用MapStruct在JPA实体和POJO DTO之间进行映射 .

我的所有实体都扩展了一个具有ID字段( java.lang.Long )的公共基类 .

我有以下抽象映射器,它允许我从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 类的任何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;
    }
}

这是为什么 ?我做错了吗?如何解决这个问题?

我在Java 8中使用MapStruct 1.0.0.Final .

编辑:如果我添加一个直接使用 AbstractBaseEntity 类的抽象方法,则添加导入:

public abstract AbstractBaseEntityDTO entityToDTO(AbstractBaseEntity abstractBaseEntity);

EDIT2:在MapStruct的Github上发布了这个问题:https://github.com/mapstruct/mapstruct/issues/844

2 回答

相关问题