我的Spring-Boot应用程序中有两个实体:
User.java
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id; String firstname; String lastname; String username; String password; }
和
角色.java
Entity @Table(name = "role") public class Role { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id; String name; String description; }
对于我的MySql数据库
我已经排除了此问题的getter和setter方法。
我想实现两个实体之间 的多对多关系 。每个用户都应该能够为其分配多个角色
我已经为数据库中的两个表创建了一个映射表。它有行
我还创建了一个新的Entity UserRole.java ,如下所示:
@Entity @Table(name = "user_role") public class UserRole implements Serializable{ private User user; private Role role; @Id @ManyToOne @JoinColumn(name = "user_id") public User getuser() { return user; } public void setUser(User user) { this.user = user; } @Id @ManyToOne @JoinColumn(name = "role_id") public Role getrole(){ return role; } public void setRole(Role role){ this.role = role; } }
现在我的问题是:这种构造正确吗?如果是,我如何在现有用户中添加现有角色并在Spring Boot中获得该用户的角色?
您可以使用Hibernate / Spring Data找到任何与多对多关系相关的教程,例如: Spring Data多对多
使用您的模型,添加关系映射很简单,如下所示:
@Entity public class Role { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; private String description; @ManyToMany(cascade = CascadeType.ALL) @JoinTable private Set<User> users; }
和这个:
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String firstname; private String lastname; private String username; private String password; @ManyToMany(mappedBy = "users") private Set<Role> roles; }