Java Hibernate-使用第三个表处理枚举角色的用户

Java Hibernate-使用第三个表处理枚举角色的用户,java,mysql,hibernate,jpa,jpa-2.1,Java,Mysql,Hibernate,Jpa,Jpa 2.1,我目前正在为后端进行用户管理。用户应该拥有不同的权限。为此,我使用Hibernate将用户和角色存储为多个关系。我希望实现以下结构: 为了避免“自由”权限,我会将角色作为枚举保留在每个用户的列表中。不幸的是,Hibernate没有为我创建中间表,我不知道如何让Hibernate为我创建它 User.java @Entity @Table(name = "user") @XmlRootElement public class User implements Serializa

我目前正在为后端进行用户管理。用户应该拥有不同的权限。为此,我使用Hibernate将用户和角色存储为多个关系。我希望实现以下结构:

为了避免“自由”权限,我会将角色作为枚举保留在每个用户的列表中。不幸的是,Hibernate没有为我创建中间表,我不知道如何让Hibernate为我创建它

User.java

@Entity
@Table(name = "user")
@XmlRootElement
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private int id;
    
    @Column(nullable=false)
    @FormParam("username")
    private String username;
    
    @Column(nullable=false)
    @FormParam("password")
    private String password;
    
    private String firstName;
    private String lastName;
    private String email;
    private boolean isActive;
    
    @ElementCollection(targetClass = Role.class, fetch=FetchType.EAGER)
    @Enumerated(EnumType.STRING)
    @CollectionTable(name="user_roles")
    @Column(name="role") 
    private Set<Role> roles;

    getters and setters

我有一个“用户角色”我是克拉斯·祖尔·雷琴,但我不知道他是谁。塞尔乌姆斯特恩德里奇。我不知道该怎么解释,我不知道该怎么解释


我的设置是使用JPA2.1进行休眠。我的数据库是当前的mysql版本。

在N到M关系中,需要一个中间表,它在两个实体之间创建一个关系

没有@Join的实体。。(表、列)注释没有关系

若要对此中间表的实体建模,严格来说不需要新实体,应使用@JoinTable注释,如下所示:

用户实体

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "USERS_ROLE", 
           joinColumns = { @JoinColumn(name = "ID_USER") }, 
           inverseJoinColumns = {
                @JoinColumn(name = "ID_ROLE")
           })
private Set<Role> roles;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“USERS\u ROLE”,
joinColumns={@JoinColumn(name=“ID\u USER”)},
反向连接列={
@JoinColumn(name=“ID\u角色”)
})
私人设定角色;
角色实体(如果需要)

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“USERS\u ROLE”,
joinColumns={@JoinColumn(name=“ID_ROLE”)},
反向连接列={
@JoinColumn(name=“ID\u USER”)
})
私人用户;

在N到M关系中,您需要一个中间表,它在两个实体之间创建一个关系

没有@Join的实体。。(表、列)注释没有关系

若要对此中间表的实体建模,严格来说不需要新实体,应使用@JoinTable注释,如下所示:

用户实体

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "USERS_ROLE", 
           joinColumns = { @JoinColumn(name = "ID_USER") }, 
           inverseJoinColumns = {
                @JoinColumn(name = "ID_ROLE")
           })
private Set<Role> roles;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“USERS\u ROLE”,
joinColumns={@JoinColumn(name=“ID\u USER”)},
反向连接列={
@JoinColumn(name=“ID\u角色”)
})
私人设定角色;
角色实体(如果需要)

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“USERS\u ROLE”,
joinColumns={@JoinColumn(name=“ID_ROLE”)},
反向连接列={
@JoinColumn(name=“ID\u USER”)
})
私人用户;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "USERS_ROLE", 
           joinColumns = { @JoinColumn(name = "ID_ROLE") }, 
           inverseJoinColumns = {
                @JoinColumn(name = "ID_USER")
           })
private Set<User> users;