【发布时间】:2023-04-10 10:53:02
【问题描述】:
我有 2 个表用户和机构,主键分别是 user_Id 和机构 ID。 尽管一个机构可以有多个用户,但每个用户只能在一个机构工作。 所以它是一对多的关系。 但是在我的 mySQL 数据库中,机构表有固定数量的用户可以工作的机构。 在我的用户表中有一个机构_Id 的外键,它指定了他为哪个机构工作。 在使用 rest api 添加用户时,我无法指定他为哪个机构工作
-----用户模型-----
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="user_Id")
private int userId;
@Column(name="name")
private String name;
@Column(name="lastname")
private String lastname;
@Column(name="email")
private String email;
@Column(name="password")
private String password;
@Column(name="isActive")
private boolean isActive;
@Column(name="lastActive")
private String lastActive;
@Column(name="createdDate")
private String createdDate;
@Column(name="isBlocked")
private boolean isBlocked;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "institution_id", nullable = false)
private Institution institution;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinTable(name = "user_has_role",
joinColumns = {
@JoinColumn(name = "user_id", referencedColumnName = "user_id",
nullable = false, updatable = true)},
inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = "role_id",
nullable = false, updatable = true)})
private Set<Role> roles = new HashSet<>();
}
-------机构模式--------
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@Table(name = "institution")
public class Institution {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="institution_Id")
private int institutionId;
@Column(name="name")
private String name;
@Column(name="type")
private String type;
@Column(name="location")
private String location;
@OneToMany(mappedBy = "institution", fetch = FetchType.LAZY)
private Set<User> user;
}
-----控制器------ 这里我使用 api 来添加用户...
@GetMapping("/getAllUsers")
public List<User> getAllUsers() {
return (List<User>) userrepository.findAll();
}
@PostMapping("/addUser")
public String addUser(@RequestBody User user) {
userrepository.save(user);
return "user saved with name: " + user.getName();
}
有办法吗?
--------api请求------
{
"name" : "Jawad",
"lastname" : "Zakhour",
"email" : "jawadzakhour@hotmail.com",
"password" : "jawad123",
"isActive" : 0,
"lastActive" : "13/08/2020",
"createdDate" : "07/07/2020",
"isBlocked" : 0,
"institution" :
{
"name" : "maliks",
"type" : "Merchant",
"location" : "Le mall sen el fil"
}
}
...
【问题讨论】:
-
到目前为止您尝试过什么?在保存用户时,您是否尝试过传递用户所在机构的
institutionId? - 考虑机构是您的数据库中已经存在的主数据。 -
我使用邮递员,所以是的,我尝试在我的 json 正文中添加所有用户字段以及机构字段,请给我一个例子@Sudoss
-
@jayee 当然可以。您能否使用您通过邮递员发送的 JSON 正文更新您的问题?另外,请确保您在数据库中为机构表插入了一些行。
-
是的,我肯定会更新我的问题,是的,我的数据库@Sudoss 中有机构记录
-
感谢您添加详细信息,请检查我的解决方案,如果您遇到任何问题,请告诉我们......
标签: java mysql spring-boot hibernate one-to-many