Spring Boot中两个实体之间的多对多关系
Posted
技术标签:
【中文标题】Spring Boot中两个实体之间的多对多关系【英文标题】:many-to-many-relationship between two entities in spring boot 【发布时间】:2017-07-12 15:44:52 【问题描述】:我的 Spring-Boot 应用程序中有两个实体:
User.java
@Entity
public class User
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String firstname;
String lastname;
String username;
String password;
和
Role.java
Entity
@Table(name = "role")
public class Role
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
String description;
对于我的 mysql 数据库
我已经排除了这个问题的 getter 和 setter 方法。
我想实现两个实体之间的多对多关系。每个用户都应该能够为自己分配多个角色
我已经为我的数据库中的两个表创建了一个映射表。它有行
user_id role_id.我还创建了一个新实体 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 中获取该用户的角色?
【问题讨论】:
【参考方案1】:您可以使用 Hibernate/Spring Data 找到任何与多对多关系相关的教程,例如: Spring Data many-to-many
使用您的模型,添加关系映射很简单,如下所示:
@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;
【讨论】:
是的,我看过本教程,但他也有相同的教程,其中包含第三个模型来将这些实体映射在一起。是不是必须要有一个 UserRole.java 类?我的 SQL 数据库中有相应的 user_role 表 是的,它是not necessary to have a UserRole.java
,在我的示例中@JoinTable
将自动创建具有连接的表,而无需您提供任何额外的类
我按照你说的做了,而且效果很好,但我不知道如何在 mysql 中写入映射表。如果您不介意提供帮助,请查看我对here的新问题@以上是关于Spring Boot中两个实体之间的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot JPA多对多关系-Rest Web Service无法返回子对象
使用 Spring Boot、Jackson 和 Hibernate 的多对多关系
Spring Boot with hibernate:创建复合键和多对多关系