Связь с перечисляемым типом в Java
-
12-09-2019 - |
Вопрос
Я пытаюсь создать связь «многие ко многим» между двумя типами, один из которых является перечислимым типом.Допустим, первая модель — «Пользователь», а вторая — «Роль».Пользователь может иметь множество ролей, и роль может принадлежать многим пользователям.
Я хотел бы иметь возможность писать простой код, например:
if (user.getRoles().contains(Role.ADMIN)) {
//do something
}
Кто-нибудь знает возможно ли это?Я видел аннотацию @Enumerated Hibernate, но мне она не кажется полезной.
В настоящее время я реализовал решение, создав модель для таблицы ссылок, но это очень беспорядочно.Любая помощь очень ценится.
-Геароид
ОБНОВЛЯТЬ: Может ли кто-нибудь указать, как сохранить EnumSet в модели?Информация выше остается в силе, я хочу создать связь ManyToMany с перечисляемым типом.
Решение 2
Думаю, я нашел хорошее решение проблемы.Если я оставлю свой перечислимый тип как что-то простое, например:
public enum Role implements Serializable{
USER, MODERATOR, ADMIN;
}
А затем в моей модели пользователя я создаю набор ролей с @CollectionOfElements, чтобы он выглядел примерно так:
@CollectionOfElements(fetch = FetchType.EAGER)
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
Кажется, Hibernate создает таблицу для этих отношений (называемую user_roles), которая работает так, как мне хотелось бы (обычное отношение ManyToMany).
Надеюсь, это кому-то поможет.
-Геароид.
Другие советы
Вы взглянули на Энумсет сорт?Это может хранить несколько экземпляров Enum в коллекции, которую вы можете вызвать contains()
на
Обычно мы создаем подклассы EnumUserType а затем укажите этот класс в файле сопоставления.