无法使用Mapstruct生成没有输入参数的映射方法

时间:2019-04-10 00:05:55

标签: java jpa datamapper mapstruct

我从Mapstruct映射器开始我的第一步。我想将JPA数据实体类映射到DTO类。这是我的源类:

@Entity
@Data
@Table(name = "projects")
public class Project {
    @Id
    private Long Id;
    private String projectName;
    private String description;

    @OneToMany(mappedBy = "project")
    List<Sprint> sprints;

    @OneToMany(mappedBy = "project")
    List<Epic> epics;

    @OneToMany(mappedBy = "project")
    List<Story> stories;

    public Project(Long id, String projectName, String description) {
        Id = id;
        this.projectName = projectName;
        this.description = description;
    }
}

这是我的目标班级:

@Data
@AllArgsConstructor
public class ProjectDTO {
    private Long Id;
    private String projectName;
    private String description;
}

@Data注释来自Lombok。 我想制作一个映射器,以将Project映射到ProjectDTO,短跑,史诗,故事等属性不应包含在ProjectDTO中。这是我的映射器界面:

@Mapper
public interface ProjectMapper extends Mapper {

    ProjectMapper INSTANCE = Mappers.getMapper(ProjectMapper.class)

    ProjectDTO projectToProjectDTO(Project project);
}

当我尝试构建它时,这是我收到的错误消息:

  

[ERROR]无法生成没有输入参数的映射方法。

我想这与ProjectDTO中缺少的属性有关,但不知道如何解决。使用@Mapping,我无法做到:

@Mapping(source=“sprints”, target= null)

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

也添加“ @NoArgConstructor”。 MapStruct不能(至今)通过构造函数处理构造对象。如果您的对象确实是不可变的,另一种选择是使用“ @Builder”

答案 1 :(得分:0)

您不应该扩展注释映射器。只要在接口的类型声明级别使用它就足够了