java - Spring Boot @OneToMany 映射

标签 java spring hibernate spring-boot

我正在学习 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 无法调用 sendError() ,我必须在评论 getter 上设置 @JsonIgnore

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

最佳答案

您应该在关系中的一个对象上使用@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”。

关于java - Spring Boot @OneToMany 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57915477/

相关文章:

java - 匿名类问题

Java Spring - 在运行时添加和删除过滤器

java - JPA 事件监听器

java - 如何从 64 位 JVM 连接到 32 位 Access 数据库?

java - android 启动完成后自动启动应用程序

java.util.MissingResourceException : Can't find bundle for base name

spring - 在 Spring MVC model.addAttribute() 方法中传递一个新对象

java - Spring MVC : Sharing context between JAR and WAR in EAR

java - 如何在 Jpa 实体中使用 Java 继承

java - Hibernate.initialize() 如何工作