【问题标题】:Entity with associated entity to DTO与 DTO 关联实体的实体
【发布时间】:2017-05-18 19:20:21
【问题描述】:

我想询问将具有关联实体的实体转换为 DTO 的良好做法。

所以,例如我有 3 个实体:

@Entity
@Table
public class First {
    @Id
    private int id;

    @OneToMany(mappedBy = "first")
    ...
    private List<Second> second;

    @ManyToOne
    ...
    private Third third;


@Entity
@Table
public class Second {
    @Id
    private int id;

    @ManyToOne
    ...
    private First first;

    @OneToMany(mappedBy = "second")
    ...
    private List<Third> third;



@Entity
@Table
public class Third {
    @Id
    private int id;

    @ManyToOne
    ...
    private Second second;

    @OneToMany(mappedBy = "third")
    ...
    private List<First> first;

将所有这些转换为 DTO 的最佳做法是什么? 我不想使用外部库。

如您所见,问题在于它的重复性和嵌套组合。

您好。

编辑: 谁能给我自己使用的映射DTO的库的名称吗?

【问题讨论】:

  • 这种从实体到 DTO 的映射(反之亦然)总是归结为一些非平凡的映射代码,通常涉及反射以解析相关字段并在映射中存储引用以解析循环。归根结底,这本身通常最终会成为一个非常耗时的项目,而且您很可能会重新发明轮子。我强烈建议您寻找合适的映射库。
  • 那么,没有更好的方法吗?你能告诉我那个图书馆的名字吗?我在网上找到了一些,但也许你可以根据你的经验给我一个。
  • 我在Dozer 上取得了不错的成绩。它相对容易配置,甚至涵盖了相当复杂的用例。它可以轻松处理循环和继承。
  • Orika 是另一个很好的 xml 免费库 Orika

标签: java hibernate persistence


【解决方案1】:

这可能会有所帮助:

我建议使用自定义 dto 来避免循环(导致 StackOverFlowError)。管理您正在传输的内容的优势。使用上面的实体类,我构造了下面的dto。

我有像龙目岛这样的依赖
"org.projectlombok" % "lombok" % lombokVersion

在我的构建中。

构建了我的自定义 DTO

@Data
public class FirstDTO implements Jsonable {
   protected String id; 
   protected ThirdDTO third;

   public FirstDTO(){}

   @JsonCreator
   public FirstDTO(@JsonProperty("id") String id,
                     @JsonProperty("third") Third third){
          this.id = id;
          this.third = third;
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多