休眠-具有枚举角色的用户使用第三张表处理

时间:2020-06-30 21:23:27

标签: java mysql hibernate jpa jpa-2.1

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

enter image description here

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

User.java

j=1

Role.java

while

我非常喜欢Zwischentabelle“ UserRole” mit einer Klasse zu erreichen,halte ich aber nichtfürwirklich richtigbzw。塞尔·乌姆斯塔德利希。 Ich glaube das meine Anchationen noch nicht richtig sind undwürdemich um einen Tipp freuen。

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

1 个答案:

答案 0 :(得分:0)

在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_ROLE", 
           joinColumns = { @JoinColumn(name = "ID_ROLE") }, 
           inverseJoinColumns = {
                @JoinColumn(name = "ID_USER")
           })
private Set<User> users;