gpt4 book ai didi

java - 具有oneToMany关系的Spring boot rest api post方法

转载 作者:行者123 更新时间:2023-12-05 00:13:10 26 4
gpt4 key购买 nike

我是 spring 的新手,正在构建我的第一个 Web 应用程序。我有一个项目和用户实体。用户可能有很多项目。所以用户有一个项目列表

@Entity
@Table(name = "user")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, allowGetters = true)
public class User implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotBlank
private String name;

private String img;

@NotBlank
@Column(unique = true)
private String email;

@JsonBackReference
@Fetch(FetchMode.JOIN)
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Item> items;

// getters and setters

}

这是我的 Item 实体
@Entity
@Table(name = "item")
@EntityListeners(AuditingEntityListener.class)
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@JsonIgnore
@JsonManagedReference
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// setters and getters
}

我还创建了 rest Controller 来创建 Item 并像这样定义了 POST 端点
@PostMapping("/item")
public Item createNote(@Valid @RequestBody Item item) {
return itemRepository.save(item);
}

在这里我如何使用 postman 发送请求
enter image description here

那么我需要如何用这种关系保存这个项目对象呢?有任何想法吗?

最佳答案

您收到此错误是因为在您保存项目时数据库中不存在引用的用户。您必须执行的操作取决于您希望应用程序的行为方式。

如果在您保存项目之前用户必须存在,您应该通过他的姓名或电子邮件加载用户,在项目中引用他,然后保存项目。

如果您想在创建项目时创建用户,您可以像处理用户类中的项目一样在项目中级联用户。因此,如果您想在保留项目时保留用户,请尝试 CascadeType.PERSIST

@ManyToOne(cascade = CascadeType.PERSIST)
private User user;

但即使您想在创建项目时创建用户,您也应该事先检查用户是否已经存在并最终加载他。

所以,
  • 级联
  • 通过用户名或电子邮件加载用户
  • 项目中的引用(如果存在)或离开(如果没有找到)
  • 保存项目
  • 关于java - 具有oneToMany关系的Spring boot rest api post方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48937513/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com