spring - 双向多对多无限递归
问题描述
我正在使用 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 时,我得到了无限递归。我怎样才能避免这个问题?
解决方案
您必须在您的 ExamDetailProjection 中删除您对主题的引用。
您必须为您的主题定义一个预测包,并为您的考试定义另一个预测包。
考试投影将有一个不参考考试的主题投影,并且在另一个方向上也是如此。
推荐阅读
- python-3.x - 当损失依赖于输入并通过自定义损失层实现时,如何使用 tf estimator API 为 train_op 设置损失?
- ios - 在 iPad 中显示 ActionSheet
- ffmpeg - 没有 RTSP 的 TCP 上的 RTP(用于在 FFmpeg 中接收)
- windows - 用于检查 Windows 更新的 VB 代码说服务器不可用
- oracle - 异常与 raise_application_error
- javascript - 使用Javascript在图像上绘制画布线不会影响整个区域
- objective-c - 如何在 Objective-C 中测试标准输入功能?
- node.js - 我尝试使用 nodejs 和 mongodb 进行 crud 操作。所有 crud 操作都工作正常。但是 get 方法只显示一个数据而不显示所有数据
- mysql - 如何运行包含大量数据的查询?
- r - 从服务器端调用对数据表应用客户端过滤器