我的数据库中有 4 个表。 User(将 role_id 列作为外键)、Role、Permission 以及名为 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 类之间缺失的链接。
最佳答案
Role 和 Permission 表之间的 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/