如何将 JPA OneToMany 关系转换为 DTO

Mik*_* S. 9 java jpa dto

我有一个班级Plan,其中有一个Activity. 所述Activity类具有到单个参考Plan。因此,有一个一对多这样的关系:

@Entity
public class Plan {

    @OneToMany(mappedBy = "Plan")
    private List<Activity> activities;
}

@Entity
public class Activity {

    @ManyToOne
    @JoinColumn(name= "PLAN_ID")
    private Plan plan;
}
Run Code Online (Sandbox Code Playgroud)

我需要将它们转换为 DTO 以发送到表示层。所以我有一个汇编器类来简单地将域对象转换为 POJO。

public class PlanAssembler {

    public static PlanDTO makeDTO(Plan p) {

    PlanDTO result = new PlanDTO();
    result.setProperty(p.getProperty);
    ... 

    for (Activity a: p.getActivity()) {

     // Here I need to iterate over each activity to convert it to DTO
     // But in ActivityAssembler, I also need PlanDTO

    }
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,PlanAssembler我需要遍历所有活动,并将其转换ActivityDTO,但麻烦的是,在ActivityAssembler我还需要PlanDTO构建ActivityDTO。这将是一个无限循环。我该如何解决这个问题?

请帮忙。

Jaf*_*may 2

它不会是无限循环,因为您必须使用在循环之前刚刚创建的 PlanDTO 对象结果。请参阅下面的代码。

注意:我仍然建议选择一个可以为您完成这些工作的框架。

public class PlanAssembler {

    public static PlanDTO makeDTO(Plan p) {

    PlanDTO result = new PlanDTO();
    result.setProperty(p.getProperty);
    ... 

    for (Activity a: p.getActivity()) {

      ActivityDTO activityDTO = new ActivityDTO();
     // Here I need to iterate over each activity to convert it to DTO
     // But in ActivityAssembler, I also need PlanDTO

     //Code to convert Activity to ActivityDTO.

      activityDTO.setPlan(result);
    }
Run Code Online (Sandbox Code Playgroud)