jpa 无法使用Mapstruct生成没有输入参数的Map方法

von4xj4u  于 2024-01-08  发布在  其他
关注(0)|答案(3)|浏览(141)

我开始使用Mapstruct mapper的第一步。我想将JPA数据实体类Map到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。我想做一个Map器来将ProjectMap到ProjectDTO,像sprints,epics,stories这样的属性不应该包含在ProjectDTO中。这是我的Map器接口:

@Mapper
public interface ProjectMapper extends Mapper {

    ProjectMapper INSTANCE = Mappers.getMapper(ProjectMapper.class)

    ProjectDTO projectToProjectDTO(Project project);
}


当我尝试构建它时,这是我得到的错误消息:
[错误]无法生成没有输入参数的Map方法。
我猜这与ProjectDTO中缺少的属性有关,但不知道如何解决它。使用@Mapping,我不能像这样做:

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


任何帮助将不胜感激!

r8xiu3jd

r8xiu3jd1#

同时添加'@NoArgConstructor'。MapStruct还不能处理通过构造函数构造对象的问题。另一个选择是使用'@Builder',如果你的对象真的是不可变的话

ojsjcaue

ojsjcaue2#

你不应该扩展注解Map器,只要在接口的类型声明级别使用它就足够了

ahy6op9u

ahy6op9u3#

最近在使用springboot时遇到了同样的问题,我的解决方案是:
创建Map器配置

@org.mapstruct.MapperConfig(
        unmappedTargetPolicy = ReportingPolicy.IGNORE,
        componentModel = "spring"
)
public interface MapperConfig {
}

字符串
然后像这样在你的一个Map器类中使用它。

@Mapper(
        config = MapperConfig.class
)
public abstract class MyClassMapper...


希望它能帮助某人。

相关问题