猿问

Spring Boot @OneToMany 映射

我正在学习Spring Boot,我有点困惑。


我创建了帖子和评论模型,我希望帖子有很多评论。


@OneToMany(cascade = CascadeType.ALL)

@JoinColumn(name ="post_id")

private List<Comment> comments = new ArrayList<>();

这是评论:


@ManyToOne(fetch = FetchType.LAZY)

@JoinColumn(name = "post_id")

private Post post;

因此,当我返回单个帖子时,我希望有评论数组,但由于错误:java.lang.IllegalStateException Cannot call sendError() ,我必须设置@JsonIgnore评论获取器。


映射的最佳实践是什么,我如何获得帖子评论,我猜,不推荐新的http请求?


慕森王
浏览 114回答 3
3回答

撒科打诨

您应该@JoinColumn在一个相关对象上使用,mappedBy在第二个对象上使用。尝试使其成为这样:@OneToMany(cascade = CascadeType.ALL, mappedBy="post")private List<Comment> comments;在 Post 实体中,在 Comment 实体中:@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "post_id")private Post post;mappedBy需要在第二个实体中存储带有属性名称的字符串。如果您存储有关帖子的信息的字段名称为“post”,则必须将其设置为“post”。

慕姐8265434

这应该是一个非常直接和简单的案例。你的Post类应该是这样的:@OneToMany(mappedBy="post",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cascade=CascadeType.ALL)private List<Comment> comments;这里重要的部分是mappedBy,它指的是Comment类中的post属性。请记住,将级联设置为 ALL 意味着删除帖子将删除与该帖子相关的所有评论(我认为这就是您想要的)。评论类完成此操作后,您现在可以处理您的Comment类,它将如下所示:@ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CascadeType.DETACH, CascadeType.REFRESH})@JoinColumn(name="post_id")private Post post;@JoinColumn 指数据库中保存与评论相关的帖子 ID 的列,这就是帖子和评论之间的联系。

天涯尽头无女友

您还可以@JoinColumn在父类中配置(这一行)@OneToMany(cascade = CascadeType.ALL)@JoinColumn(name = "post_id")private List<Comment> comments = new ArrayList<>();但你需要删除整个代码@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "post_id")private Post post;来自你的评论课。这种映射可以用来避免添加@JsonIgnore注释 getter。现在,您可以轻松保存带有评论列表的帖子类,并且还可以获得带有关联评论列表的帖子类。
随时随地看视频慕课网APP

相关分类

Java
我要回答