То, что вы, вероятно, хотите, это таблица внешних ссылок и ManyToMany
, которых я здесь не вижу. Теперь вы говорите, что между пользователем и множеством ролей существует единая связь. Другими словами, роли нельзя использовать повторно. Они принадлежат пользователю, и каждый раз, когда вы назначаете пользователю роль, даже если роль с таким именем уже существует, создается новая роль.
Вместо этого ManyToMany
имеет больше смысла. Роль традиционно не является уникальной вещью для пользователя, и многие пользователи могут иметь одну и ту же роль.
Один из способов достижения этого заключается в следующем:
@ManyToMany(targetEntity = UserRole.class, fetch = FetchType.EAGER)
@JoinColumn(name="user_role_xref",
joinColumns = @JoinColumn(name = "username", referencedColumnName = "username"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
Set<UserRole> userRoles;
Это создаст user_role_xref
таблица, которая будет содержать два столбца: username
и role_id
, которые ссылаются на User.username
и UserRole.id
соответственно. Обратите внимание, что для этого потребуется управлять UserRole
независимо от пользователей, что представляется более желательным в этом сценарии. То, что роль в данный момент не назначена пользователю, не означает, что ее следует удалить.