Java 弹簧靴@OneToMany映射

Java 弹簧靴@OneToMany映射,java,spring,hibernate,spring-boot,Java,Spring,Hibernate,Spring Boot,我正在学习Spring Boot,我有点困惑 我创建了post和comment模型,我希望post有很多评论 @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name ="post_id") private List<Comment> comments = new ArrayList<>(); 因此,我希望在返回单个帖子时使用comments数组,但由于错误:java.lang.IllegalStateExceptio

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

我创建了post和comment模型,我希望post有很多评论

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name ="post_id")
private List<Comment> comments = new ArrayList<>();
因此,我希望在返回单个帖子时使用comments数组,但由于错误:
java.lang.IllegalStateException无法调用sendError()
,我必须在注释getter上设置
@JsonIgnore


映射的最佳实践是什么,我如何获得帖子评论,我想,不建议使用新的http请求?

您应该在一个对象上使用
@JoinColumn
,在第二个对象上使用
mappedBy
。试着这样做:

@OneToMany(cascade = CascadeType.ALL, mappedBy="post")
private List<Comment> comments;

mappedBy
需要在第二个实体中存储具有属性名称的字符串。如果存储关于post的信息的字段名为“post”,则必须将其设置为“post”to。

您还可以在父类(此行)中配置
@JoinColumn

从你的评论课上。这种映射可以用来避免在注释getter上添加
@JsonIgnore


现在,您可以轻松地使用注释列表保存Post类,也可以获得带有相关注释列表的Post类。

这应该是一个非常直接和简单的例子

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name ="post_id")
private List<Comment> comments = new ArrayList<>();
  • 您的帖子类应如下所示:
@JoinColumn是指数据库中的列,它保存与评论相关的帖子的id,这就是帖子和评论之间的连接

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_id")
private Post post;
@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;
@OneToMany(mappedBy="post",
           cascade=CascadeType.ALL)
private List<Comment> comments;
@ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE,
                    CascadeType.DETACH, CascadeType.REFRESH})
@JoinColumn(name="post_id")
private Post post;