Java 实体与DTO关联的实体

Java 实体与DTO关联的实体,java,hibernate,persistence,Java,Hibernate,Persistence,我想询问一个将实体与关联实体转换为DTO的良好实践 例如,我有3个优点: @Entity @Table public class First { @Id private int id; @OneToMany(mappedBy = "first") ... private List<Second> second; @ManyToOne ... private Third third; @Entity @Table

我想询问一个将实体与关联实体转换为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;
@实体
@桌子
头等舱{
@身份证
私有int-id;
@OneToMany(mappedBy=“first”)
...
私人名单第二;
@许多酮
...
私人第三方;
@实体
@桌子
公共二等舱{
@身份证
私有int-id;
@许多酮
...
私人优先;
@OneToMany(mappedBy=“秒”)
...
私人名单第三;
@实体
@桌子
公共三等舱{
@身份证
私有int-id;
@许多酮
...
私人第二;
@OneToMany(mappedBy=“third”)
...
私人名单优先;
将所有这些转换为DTO的最佳实践是什么? 我不想使用外部库

正如您所看到的,问题在于它和嵌套关联的重复出现

你好

编辑: 有人能告诉我他自己使用的映射DTO的库的名称吗?

这可能会有帮助:

我建议使用自定义dto以避免循环(导致StackOverflowerError)。管理正在传输的内容具有优势。使用上面的entity类,我构建了下面的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;
     }
}
这可能有助于:

我建议使用自定义dto以避免循环(导致StackOverflowerError)。管理正在传输的内容具有优势。使用上面的entity类,我构建了下面的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;
     }
}

这种从实体到DTO的映射,以及从实体到DTO的映射,总是会归结为一些非平凡的映射代码,通常涉及到解析相关字段的反射,以及在映射中存储引用以解析周期。最终,这本身通常会成为一个非常耗时的项目,而且很可能你会我将重新发明轮子。我强烈建议寻找一个合适的映射库。因此,没有更好的方法可以做到这一点吗?你能告诉我该库的名称吗?我在互联网上找到了一些,但根据你的经验,也许你可以给我一个。我在这方面取得了很好的效果。它相对容易配置,甚至涵盖了非常复杂的它可以很容易地处理循环和继承。Orika是另一个好的、无xml的库,这种从实体到DTO的映射,反之亦然,总是可以归结为一些非平凡的映射代码,通常涉及反射以解析相关字段,并在映射中存储引用以解析循环。在一天结束时我通常会变成一个非常耗时的项目,而且你很可能会重新发明轮子。我强烈建议你找一个合适的地图库。所以,没有更好的方法可以做到这一点吗?你能告诉我那个库的名称吗?我在网上找到了一些,但也许你可以从你的经验中给我一个ence.我在这方面取得了很好的效果。它相对容易配置,甚至涵盖了相当复杂的用例。它可以轻松处理循环和继承。Orika是另一个v.好的、无xml的库