Отображение один ко многим с множеством возможностей - PullRequest
0 голосов
/ 08 июля 2011

Я пытаюсь сохранить свои данные, но у меня возникают проблемы при разработке схемы, которая будет работать в спящем режиме разумным образом

У меня есть два объекта: канал и пользователь.Пользователь связан с каналом, но во многих отношениях.Он может иметь 5 специальных статусов (и может быть назначен несколько) или быть нормальным.Проблема усложняется тем фактом, что это отношение «многие ко многим» (пользователь может быть в нескольких каналах, а канал имеет несколько пользователей).

Моя идея состоит в том, чтобы иметь отдельные таблицы каналов и пользователей, но иметь третьюбольшая карта стола.Эта большая таблица карт будет выглядеть примерно так:

--------------------------------------------------------------------------
| CHANNEL_ID | USER_ID | STATUS1 | STATUS2 | STATUS3 | STATUS4 | STATUS5 |
--------------------------------------------------------------------------
|      5     |    10   |    0    |    1    |    0    |     0   |    0    |
--------------------------------------------------------------------------

Обратите внимание, что если новый пользователь присоединяется к каналу, он получает новую строку.Однако, если они получают новый статус, их существующая строка изменяется.

Что меня действительно смущает, так это как реализовать что-то подобное в Hibernate.У меня есть что-то подобное, но я так долго с этим играюсь (уже 2 дня), я даже не знаю, что он делает больше.

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "quackbot_user_map", joinColumns = {
    @JoinColumn(name = "USER_ID")}, inverseJoinColumns = {
    @JoinColumn(name = "STATUS1")}) 
protected Set<UserDAOHb> status1s;
  • Есть ли лучшеспособ сделать это?
  • Должен ли я использовать выделенный объект карты, который представляет таблицу и запрос с этим вместо этого?

1 Ответ

1 голос
/ 08 июля 2011

Если вы хотите отобразить этот дизайн, вам нужен третий объект, который я назову Participation.

  • Один пользователь имеет много участников;
  • Один канал имеетмного участников;
  • У одного участия есть один канал, один пользователь и 5 логических полей (от status1 до status5)

Но более нормальный (и, безусловно, более простой для запроса) способ разработкиэто будет иметь сущность Участие с одним статусом и создать экземпляр Participation для каждого кортежа User-Channel-Status.Если вы подумаете об этом, это будет единственно возможное отображение (насколько я вижу), если количество возможных состояний будет намного больше (или не зафиксировано вообще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...