Spring Data Rest 中的 @OneToMany stackoverflow
我有一个问题实体,其中包含如下选项列表:
@OneToMany(mappedBy = "question")
List<Option> options;
在选项实体中,我已将关系指定为:
@ManyToOne
@JoinColumn(name="question_id")
Question question;
当我点击 /api/questions
时,它工作正常,但是当我点击 / api/questions/1
,它给出 java.lang.StackOverflowError: null
我做错了什么?
I have a Questions entity which has list of options as follows:
@OneToMany(mappedBy = "question")
List<Option> options;
And in Options entity I have specified the relation as :
@ManyToOne
@JoinColumn(name="question_id")
Question question;
When I hit /api/questions
, it works fine but when I hit /api/questions/1
, it gives java.lang.StackOverflowError: null
What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为选项指的是问题,问题指的是选项。你应该添加
@JsonIgnore 到您的班级之一,以防止彼此无限链接。 toString() 方法也可以实现同样的效果。如果您使用 Lombok 或生成默认的 toString 方法,也可能导致 statckoverflow。因为班级与班级相连。为了防止这种情况,请尝试在 toString 方法之一中排除类上的链接。
在 Lombok 中的 @ToString 注释中添加排除语句并排除选项或问题。也许您调用案例循环的 toString 方法。 @ToString(排除 = {"选项"})
It's because Option refers to Question and Question to Option. You should add
@JsonIgnore to one of your class to prevent infinite linking to each other. The same thing can be with toString() method. If you use Lombok or generate default toString method, it could cause statckoverflow also. Because classs linked to class. To prevent this try to exclude link on class in one of toString method.
In Lombok in @ToString annotation add exclude statement and exclude either Option or Question. Maybe you call toString method that cases loop. @ToString(exclude = {"option"})