Подключение внешнего ключа к посреднику - PullRequest
0 голосов
/ 19 января 2020

В моей базе 4 таблицы. Пользователь (который имеет столбец role_id в качестве внешнего ключа), Роль , Разрешение и промежуточную таблицу с именем RolePermission (в качестве отношения между ролью и разрешением - M: N)

Я хочу получить все разрешения определенного пользователя c на основе его 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.

1 Ответ

0 голосов
/ 19 января 2020

Соединение M: N между таблицами Role и Permission должно быть определено в таблице Role следующим образом:

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

а затем внешний ключ в сущности Пользователь должен быть подключен к сущности Роль :

@ManyToOne
@JoinColumn(name = "role_id", referencedColumnName = "rid")
private Role role;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...