小编Ste*_*een的帖子

如何映射来自同一源类的扩展 DTO

我已经开始使用 Mapstruct 将 JPA 实体映射到 DTO。对于基本实体,这非常有效。

我的问题:某些实体具有延迟加载的集合,其中包含我不希望总是想要获取和映射的其他详细信息。作为解决方案,我添加了一个基本超类,其中包含始终映射的所有字段,以及一个包含集合的子类。它们都代表相同的实体,因此它们使用相同的源类。

当我尝试创建一个包含映射到来自同一源的两种类型的方法的 Mapper 时,即使方法签名(至少是返回类型)不同,我也会收到一个不明确的映射方法错误。我会以错误的方式解决这个问题吗?我不能使用相同源的 DTO 使用子类吗?

编辑: 以防万一,我正在使用 mapstruct-jdk8:1.1.0.Final

编辑 2: 下面的例子只是我头顶上的一个例子。当我实际使用代码时,它起作用了。事实证明,我的问题是示例中未包含的内容。当我添加映射票证集合的方法时,似乎发生了错误。这可能意味着问题与继承无关(直接?)。我可能缺少一些配置,但我不确定要查找什么。

简单的例子:

票务实体

public class Ticket {
  private long id;
  private String title;
  private Set<Comment> comments;

  // Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

票务DTO

public class TicketDTO {
  private long id;
  private String title;

  // Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

带有评论的票 DTO

public class TicketWithCommentsDTO extends TicketDTO {
  private List<CommentDTO> comments;


  // Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

票务映射器界面

@Mapper(uses= { CommentMapper.class })
public interface TicketMapper {
  TicketDTO …
Run Code Online (Sandbox Code Playgroud)

java mapstruct

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

mapstruct ×1