Вопрос

Я пытаюсь создать связь «многие ко многим» между двумя типами, один из которых является перечислимым типом.Допустим, первая модель — «Пользователь», а вторая — «Роль».Пользователь может иметь множество ролей, и роль может принадлежать многим пользователям.

Я хотел бы иметь возможность писать простой код, например:

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 а затем укажите этот класс в файле сопоставления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top