【问题标题】:many-to-many-relationship between two entities in spring bootSpring 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 中获取该用户的角色?

【问题讨论】:

    标签: java mysql spring jpa 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的新问题@
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多