弹簧启动中两个实体之间的多对多关系

时间:2017-02-22 14:20:27

标签: java mysql spring jpa spring-boot

我的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 个答案:

答案 0 :(得分: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;
}
相关问题