我试图了解 Spring JPA 如何在关系 (@OneToMany) 下创建(POST http 操作)资源。 我有 2 个简单课程,
Product
和 Comment
。一个product
与许多comments
有关。
产品类别:
@Entity
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "product_id")
private int productId;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@OneToMany(cascade = { CascadeType.PERSIST})
@JoinColumn(name = "product_id")
private List<Comment> comments;
... getters and setters are also implemented
}
评论课:
@Entity
@Table(name = "comment")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "comment_id")
private int commentId;
@Column(name = "content")
private String content;
@Column(name = "product_id")
private int productId;
... getters and setters
}
我将这个 @OneToMany 关系 实现为单向的,有意的,只是为了了解它是如何工作的。 我还为这两种资源制作了基本的控制器和存储库类。 我想了解的是,当我向
"/products"
发送 Post 请求(使用邮递员)时,同时包含新产品及其新评论,如下所示:
我不明白为什么我从休眠中收到错误 500,它成功创建了新产品但没有针对评论,因为评论
is missing the foreign key.
当然我在这里遇到问题。但由于我的关系是从产品单向的,这应该意味着产品主导了关系。所以spring应该根据产品同步persisting操作(我加了CascadeType.PERSIST
)。在我的请求正文中,产品的comments list
填充了两个新评论。这应该设置产品的comments list
并告诉休眠该产品有两个新的comments
。
所以我的问题是,为什么休眠不创建产品,然后获取该产品的新 ID,然后创建两个新评论,并将外键设置为这个新产品 ID?
谢谢你的帮助。