如何解决Java Spring Boot中的一对多关系
我有2个表Users和Institution,主键分别为user_Id和stitution_id。 每个用户只能在一个机构中工作,尽管一个机构可以有许多用户。 因此它是一对多的关系。 但是在我的mySQL db中,机构表具有用户可以在其中工作的固定数量的机构。 我的用户表中有一个stitution_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",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"
}
}
...
解决方法
感谢您添加详细信息。
您可以通过传递institution
表的主键(对应记录的institution_Id
)来实现相同的目的。
例如-如果您希望将用户Jawad
链接到机构maliks
,那么您的institution
表应该已插入一行,其值为maliks,Merchant,Le mall sen el fil
分别用于name
,type
和location
列。 (我假设此Recod在您的数据库中有institution_Id
= 1)
然后您需要根据请求传递以下JSON
{
"name" : "Jawad","lastname" : "Zakhour","email" : "jawadzakhour@hotmail.com","password" : "jawad123","isActive" : 0,"lastActive" : "13/08/2020","createdDate" : "07/07/2020","isBlocked" : 0,"institution" :
{
"institutionId" : 1 // As per my assumption stated above
}
}
您需要确保的另一件事是您的User
模型具有如下所示的层叠设置
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "institution_id",nullable = false)
private Institution institution;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。