Jor*_*oel 5 java mysql many-to-many jpa spring-boot
我制作了一个包含一些用户的 Spring Boot 应用程序。这些用户可以属于 0 个、一个或多个组(为了更好的可视化,我省略了一些代码行):
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToMany
@JoinTable(
name = "group_user",
joinColumns = {@JoinColumn(name = "user_id")},
inverseJoinColumns = {@JoinColumn(name = "group_id")}
)
private List<Group> groups = new ArrayList<>();
public User(String name, List<Group> groups) {
this.name = name;
this.groups = groups;
}
}
Run Code Online (Sandbox Code Playgroud)
一个组可以包含 0 个、一个或多个用户。
@Entity
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToMany(mappedBy = "groups")
private List<User> users = new ArrayList<>();
public Group(String name, List<User> users) {
this.name = name;
this.users = users;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 MySQL,并且创建了 3 个表:
CREATE TABLE user (
id integer NOT NULL AUTO_INCREMENT,
name varchar(255),
PRIMARY KEY (id)
);
CREATE TABLE group (
id integer NOT NULL AUTO_INCREMENT,
name varchar(255),
PRIMARY KEY (id)
);
CREATE TABLE group_user (
user_id int NOT NULL,
group_id int NOT NULL,
PRIMARY KEY (user_id, group_id),
KEY group_id (group_id),
CONSTRAINT group_user_ibfk_1
FOREIGN KEY (user_id) REFERENCES user (id),
CONSTRAINT group_user_ibfk_2
FOREIGN KEY (group_id) REFERENCES group (id)
);
Run Code Online (Sandbox Code Playgroud)
我通过创建这个新 User、将组传递给其构造函数并调用 userDao.save() 方法,成功地将用户链接到组:
userDao.save(new User(name, groups));
Run Code Online (Sandbox Code Playgroud)
现在我想编辑我创建的用户并让他属于另一个组。如何在不创建新用户的情况下执行此操作?
例如,我有一个不属于任何组的用户:
INSERT INTO user VALUES(1, 'Jordan');
Run Code Online (Sandbox Code Playgroud)
还有这些群体:
INSERT INTO group VALUES(1, 'Group 1');
INSERT INTO group VALUES(2, 'Group 2');
Run Code Online (Sandbox Code Playgroud)
现在,我如何(在 Java 中)将我的用户链接到组 1 和组 2?
您必须从数据库中选择具有您选择的ID的组实体。您可以通过findById方法使用该实体的 JPA接口,也可以在接口中创建您自己的自定义方法。
当您拥有该组的实体后,您可以将其添加到用户实体字段组中。之后保存用户实体。
相同的过程适用于双向关系中的另一方组。
推荐阅读:
归档时间: |
|
查看次数: |
22921 次 |
最近记录: |