(casc我们可以使用Spring JPA在OneToMany单向关系中连续创建父子关系吗?

问题描述 投票:0回答:0

我试图了解 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? 谢谢你的帮助。

java spring spring-data-jpa persistence hibernate-onetomany
© www.soinside.com 2019 - 2024. All rights reserved.