我正在使用MapStruct在JPA实体和POJO DTO之间进行映射。
我所有的实体都扩展了一个具有ID字段(java.lang.Long
)的通用基类。
我有以下抽象映射器,它允许我从JPA中的关系映射到DTO中的简单Long域(或List)。
实体或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;
}
}
这是为什么 ?我做错了吗?如何解决呢?
我在Java 8中使用MapStruct 1.0.0.Final。
编辑:如果我添加一个直接使用
AbstractBaseEntity
类的抽象方法,那么将添加导入:public abstract AbstractBaseEntityDTO entityToDTO(AbstractBaseEntity abstractBaseEntity);
EDIT2:在MapStruct的Github上发布了此问题:https://github.com/mapstruct/mapstruct/issues/844
最佳答案
当缺少MapStruct的导入时,请注意,您可以手动配置Mapper进行导入:
@Mapper( imports = AbstractBaseEntity.class )
见Exemple 57 in MapStruct documentation
关于java - 为什么此MapStruct生成的类不包含import语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38610306/