java 在进行POST请求时,如何将子对象保存在现有父对象中?

cngwdvgl  于 2023-02-28  发布在  Java
关注(0)|答案(2)|浏览(141)

我尝试执行POST请求以将子对象(Chapter)保存到父对象(User)上,但它不起作用。
PostMapping控制器将Body保存到数据库中,但不与父关系一起保存(在我的例子中,类章→ user_id = null)。
我在Postman中使用以下URL:

http://localhost:8080/api/chapters?username=admin
Content-type: application/json
Body: raw

与本机构:
x一个一个一个一个x一个一个二个x
我期望的是将子对象与父对象一起保存,这意味着使用user_id = 1,因为现在只有一个用户(id = 1)。

a0x5cqrl

a0x5cqrl1#

您必须为@ManyToOneMap添加级联。在您的用户@Entity中更新此行,它将工作:

@Entity
public class Chapter {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, updatable = false)
    private Long id;

    private String name;

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
    @JoinColumn(name = "user_id")
    private User user;

}

第二件你可能想做的事是更新你的控制器,这样它就会为你的新章节分配用户ID,就像这样:

@PostMapping("/chapters")// issue is here
void newChapter(@RequestParam (value = "username", required=true)
                        String username, @RequestBody Chapter newChapter) {
    User user = userRepository.findByUsername(username);
    newChapter.setUser(user);
    user.addChapter(newChapter);
    System.out.println(user);
    userRepository.save(user);
}
xuo3flqw

xuo3flqw2#

我认为你应该在newChapter.user字段中设置user实体,因为它是拥有关系的Chapter实体。
OneToMany注解中的cascade方法只是指定了哪些操作必须级联,并不意味着Chapter实体的user属性会自动设置。

相关问题