Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将外键连接到中间实体_Java_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

Java 将外键连接到中间实体

Java 将外键连接到中间实体,java,spring-boot,jpa,spring-data-jpa,Java,Spring Boot,Jpa,Spring Data Jpa,我的数据库中有4个表用户(角色id列作为外键)、角色、权限和名为角色权限的中间表(角色和权限之间的关系为M:N) 我想根据特定用户的角色id获取其所有权限 中间表的定义如下: CREATE TABLE role_permission ( role_id TINYINT NOT NULL, perm_id TINYINT NOT NULL, CONSTRAINT role_permission_pk PRIMARY KEY (role_id, perm_id), C

我的数据库中有4个表用户(角色id列作为外键)、角色权限和名为角色权限的中间表(角色和权限之间的关系为M:N)

我想根据特定用户的角色id获取其所有权限

中间表的定义如下:

CREATE TABLE role_permission
(
    role_id TINYINT NOT NULL,
    perm_id TINYINT NOT NULL,
    CONSTRAINT role_permission_pk PRIMARY KEY (role_id, perm_id),
    CONSTRAINT role_permission_f1 FOREIGN KEY (role_id) REFERENCES role (rid),
    CONSTRAINT role_permission_f2 FOREIGN KEY (perm_id) REFERENCES permission (pid)
);
@Entity
@Table(name = "role_permission")
public class RolePermission {
    @EmbeddedId
    private RolePermissionPK id;
    @ManyToOne
    @JoinColumn(name = "role_id", referencedColumnName = "rid", insertable = false, updatable = false)
    private Role role;
    @ManyToOne
    @JoinColumn(name = "perm_id", referencedColumnName = "pid", insertable = false, updatable = false)
    private Permission permission;
...
}
@ManyToMany
@JoinTable(
        name = "role_permission",
        joinColumns = @JoinColumn(name = "role_id"),
        inverseJoinColumns = @JoinColumn(name = "perm_id")
)
List<Permission> permissions;
与此表相关的实体如下所示:

CREATE TABLE role_permission
(
    role_id TINYINT NOT NULL,
    perm_id TINYINT NOT NULL,
    CONSTRAINT role_permission_pk PRIMARY KEY (role_id, perm_id),
    CONSTRAINT role_permission_f1 FOREIGN KEY (role_id) REFERENCES role (rid),
    CONSTRAINT role_permission_f2 FOREIGN KEY (perm_id) REFERENCES permission (pid)
);
@Entity
@Table(name = "role_permission")
public class RolePermission {
    @EmbeddedId
    private RolePermissionPK id;
    @ManyToOne
    @JoinColumn(name = "role_id", referencedColumnName = "rid", insertable = false, updatable = false)
    private Role role;
    @ManyToOne
    @JoinColumn(name = "perm_id", referencedColumnName = "pid", insertable = false, updatable = false)
    private Permission permission;
...
}
@ManyToMany
@JoinTable(
        name = "role_permission",
        joinColumns = @JoinColumn(name = "role_id"),
        inverseJoinColumns = @JoinColumn(name = "perm_id")
)
List<Permission> permissions;
但是当我试图在我的User类中获取此字段时,它不会返回任何结果:

@OneToMany(mappedBy = "role")
private List<RolePermission> permissions;
@OneToMany(mappedBy=“role”)
私有列表权限;

数据库工作正常,包括角色、权限和角色权限在内的所有实体也工作正常。但是我无法找出RolePermission类和User类之间缺少的链接。

角色表和权限表之间的M:N连接应该在角色表中定义,如下所示:

CREATE TABLE role_permission
(
    role_id TINYINT NOT NULL,
    perm_id TINYINT NOT NULL,
    CONSTRAINT role_permission_pk PRIMARY KEY (role_id, perm_id),
    CONSTRAINT role_permission_f1 FOREIGN KEY (role_id) REFERENCES role (rid),
    CONSTRAINT role_permission_f2 FOREIGN KEY (perm_id) REFERENCES permission (pid)
);
@Entity
@Table(name = "role_permission")
public class RolePermission {
    @EmbeddedId
    private RolePermissionPK id;
    @ManyToOne
    @JoinColumn(name = "role_id", referencedColumnName = "rid", insertable = false, updatable = false)
    private Role role;
    @ManyToOne
    @JoinColumn(name = "perm_id", referencedColumnName = "pid", insertable = false, updatable = false)
    private Permission permission;
...
}
@ManyToMany
@JoinTable(
        name = "role_permission",
        joinColumns = @JoinColumn(name = "role_id"),
        inverseJoinColumns = @JoinColumn(name = "perm_id")
)
List<Permission> permissions;

您说用户有一个role\u id列,用于标识其角色。所以用户应该有一个manytone和Role:用户有一个Role。RolePermission实体也没用:您可以在角色和权限之间有很多关联。您定义的关联毫无意义:用户没有角色权限。它有一个角色,该角色有权限。数据库已设计好,无法更改。“角色”数据库包含所有实现的用户角色,“权限”表包含所有权限。中间表“RolePermission”为每个实现的角色提供权限。因此,为了获得该用户的给定权限,我必须从“RolePermission”表中检索数据。数据库不是问题所在。问题在于您的Java代码。再读一遍我的评论。我从未建议对你的数据库做任何更改。