Dav*_*vid 3 java spring jpa one-to-many
我是春季新手,并且正在构建我的第一个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
}
Run Code Online (Sandbox Code Playgroud)
这是我的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
}
Run Code Online (Sandbox Code Playgroud)
我还创建了rest控制器来创建Item,并定义了这样的POST端点
@PostMapping("/item")
public Item createNote(@Valid @RequestBody Item item) {
return itemRepository.save(item);
}
Run Code Online (Sandbox Code Playgroud)
那么,我如何需要以这种关系保存该项目对象?有任何想法吗?
小智 5
之所以会出现此错误,是因为保存项目的那一刻,数据库中就没有引用的用户。您必须执行的操作取决于您希望应用程序如何运行。
如果在保存项目之前该用户必须存在,则应通过其名称或电子邮件来加载该用户,在该项目中对其进行引用,然后保存该项目。
如果要在创建项目时创建用户,则可以像处理用户类中的项目一样将用户级联到项目中。因此,如果要在保留项目时保留用户,请尝试CascadeType.PERSIST
@ManyToOne(cascade = CascadeType.PERSIST)
private User user;
Run Code Online (Sandbox Code Playgroud)
但是,即使您要在创建项目时创建用户,也应事先检查该用户是否已存在并最终加载该用户。
所以,
| 归档时间: |
|
| 查看次数: |
4219 次 |
| 最近记录: |