我是 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 发送请求
那么我需要如何用这种关系保存这个项目对象呢?有任何想法吗?
最佳答案
您收到此错误是因为在您保存项目时数据库中不存在引用的用户。您必须执行的操作取决于您希望应用程序的行为方式。
如果在您保存项目之前用户必须存在,您应该通过他的姓名或电子邮件加载用户,在项目中引用他,然后保存项目。
如果您想在创建项目时创建用户,您可以像处理用户类中的项目一样在项目中级联用户。因此,如果您想在保留项目时保留用户,请尝试 CascadeType.PERSIST
@ManyToOne(cascade = CascadeType.PERSIST)
private User user;
但即使您想在创建项目时创建用户,您也应该事先检查用户是否已经存在并最终加载他。
所以,
关于java - 具有oneToMany关系的Spring boot rest api post方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48937513/