【问题标题】:Bidirectional ManyToMany infinite recursion双向多对多无限递归
【发布时间】:2018-04-28 16:22:31
【问题描述】:

我正在使用 spring boot 和 spring data rest 并且有两个实体,Exam 和 Subject,它们的定义如下:

public class Exam {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="exam_id")
    Integer examId;

    @Column(name="exam_name")
    String examName;

    @ManyToMany(mappedBy = "exams")
    Set<Subject> subjects = new HashSet<>(0);
}



public class Subject {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "subject_id")
    Integer subjectId;


    @Column(name = "subject_name")
    String subjectName;


    @ManyToMany
    @JoinTable(
            name = "subject_exam",
            joinColumns = {@JoinColumn(name = "subject_id", updatable = false, nullable = false)},
            inverseJoinColumns = {@JoinColumn(name = "exam_id", updatable = false, nullable = false)}
    )
    Set<Exam> exams = new HashSet<>(0);


}

现在我已经定义了主题的投影如下:

@Projection(name="detail", types={Subject.class})
public interface SubjectDetailProjection {

    Integer getSubjectId();
    String getSubjectName();
    Set<ExamDetailProjection> getExams();
}

考试的详细投影也以相同的方式定义。 现在,在为这个投影调用 api 时,我得到了无限递归。我怎样才能避免这个问题?

【问题讨论】:

    标签: spring jackson spring-data-rest


    【解决方案1】:

    您必须在 ExamDetailProjection 中删除您对主题的引用。

    您必须为您的主题定义一个投影包,并为您的考试定义另一个投影包。

    考试投影将有一个不参考考试的主题投影,在另一个方向上也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多