java - 将外键连接到中介实体

标签 java spring-boot jpa spring-data-jpa

我的数据库中有 4 个表。 User(将 role_id 列作为外键)、RolePermission 以及名为 RolePermission 的中间表(因为角色和权限的关系是M:N)

我想根据特定用户的role_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;
...
}

但是当我尝试在我的 User 类中获取此字段时,它什么也不返回:

@OneToMany(mappedBy = "role")
private List<RolePermission> permissions;

数据库工作正常,所有实体(包括 Role、Permission 和 RolePermission)也都正常工作。但我无法找出 RolePermission 类和 User 类之间缺失的链接。

最佳答案

RolePermission 表之间的 M:N 连接应在 Role 表中定义,如下所示:

@ManyToMany
@JoinTable(
        name = "role_permission",
        joinColumns = @JoinColumn(name = "role_id"),
        inverseJoinColumns = @JoinColumn(name = "perm_id")
)
List<Permission> permissions;

然后User实体中的外键应该连接到Role实体:

@ManyToOne
@JoinColumn(name = "role_id", referencedColumnName = "rid")
private Role role;

关于java - 将外键连接到中介实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804803/

相关文章:

java - 如何在处理中获取对象的 X 位置

java - 哪个 for 循环头性能更好?

java - 计算字符串的长度和 "padding"it

java - 如何使用@Inheritance加上GenerationType.SEQUENCE

java - Superpowered NDK Android : returning int succeeds in "extern" block, 调用函数失败

Spring data jpa @Query - 无法为结果映射创建 "AS"别名

spring-boot - 在 Spring JPA 中应用 Multi-Tenancy 通用标准的最佳实践?

java - 如何将 SpringBootTest 与 Web 安全和 Service usnig Junit5 和 Mockito 结合使用?

jpa criteria builder 结合了分页和计数结果

java - 在 JPA 中使用 MAX() 的 SELECT 查询无法获得正确的值