3 回答
TA贡献1934条经验 获得超2个赞
您应该@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”。
TA贡献1813条经验 获得超2个赞
这应该是一个非常直接和简单的案例。
你的Post类应该是这样的:
@OneToMany(mappedBy="post",
cascade=CascadeType.ALL)
private List<Comment> comments;
这里重要的部分是mappedBy,它指的是Comment类中的post属性。
请记住,将级联设置为 ALL 意味着删除帖子将删除与该帖子相关的所有评论(我认为这就是您想要的)。
评论类
完成此操作后,您现在可以处理您的Comment类,它将如下所示:
@ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.DETACH, CascadeType.REFRESH})
@JoinColumn(name="post_id")
private Post post;
@JoinColumn 指数据库中保存与评论相关的帖子 ID 的列,这就是帖子和评论之间的联系。
TA贡献1831条经验 获得超9个赞
您还可以@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。
现在,您可以轻松保存带有评论列表的帖子类,并且还可以获得带有关联评论列表的帖子类。
添加回答
举报