@OneToMany在Spring Data Rest中的应用

3

我有一个问题实体,其中包含以下选项列表:

@OneToMany(mappedBy = "question")
List<Option> options;

在Options实体中,我已经指定了以下关系:
@ManyToOne
@JoinColumn(name="question_id")
Question question;

当我访问 /api/questions 时,一切正常,但是当我访问 /api/questions/1 时,会出现 java.lang.StackOverflowError: null 错误。我做错了什么?

请在您的方法后添加签名。 - Joe Taras
哪个方法?我正在使用Spring Data Rest。 - ArslanAnjum
1个回答

6
这是因为Option引用Question,而Question又引用Option。你应该在其中一个类上添加@JsonIgnore以避免彼此之间的无限链接。toString()方法也会出现相同的问题。如果使用Lombok或生成默认的toString方法,也可能导致堆栈溢出,因为类与类之间有关联。为了防止这种情况发生,可以在其中一个toString方法中排除类之间的链接。在Lombok的@ToString注解中添加exclude语句,并排除Option或Question之一。可能是由于调用了循环的toString方法。@ToString(exclude = {"option"})

1
好吧,在我的情况下它不起作用,我尝试在选项中添加@JsonIgnore。我正在使用Lombok和QueryDsl,如果这些信息能进一步缩小范围的话。 - ArslanAnjum
1
在Lombok中的@ToString注释中添加exclude语句,然后排除Option或Question中的任意一个。也许你调用了toString方法,导致了循环。@ToString(exclude = {"option"}) - Den B
奇怪的是,这个问题被解决了。请更新您的答案,以便我可以将其标记为正确的。 - ArslanAnjum
更新了我的回答。 - Den B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接