Как поддерживать связь между двумя таблицами.?

У меня есть две таблицы: одна — USERPROFILE, а другая — SKILLS.

Обе таблицы содержат данные. У одного пользователя может быть много навыков, и один навык может принадлежать многим пользователям. Как мне поддерживать отношения между ними...?

Я добавил отношения в таблице UserProfile как один ко многим с навыками. Но когда я назначаю объект навыка userprofile и пытаюсь его сохранить, получаю исключения. В другом случае, если я создаю новый объект Skill и назначаю объект userprofile и сохраняю объект userprofile, он сохраняется. Но новый идентификатор генерируется для того же навыка.

Я не хочу этого, я хочу поддерживать связь между двумя таблицами без создания новых идентификаторов.


person RBP    schedule 13.02.2014    source источник


Ответы (3)


Вы должны использовать таблицу сопоставления для Skills и UserProfile, которая сохранит только идентификатор из обеих таблиц.

Это поможет вам восстановить все навыки для пользователя. А также все пользователи, имеющие навык

Его структура должна быть такой

user_skills
----------------------
ID  |  skill_id  | user_id
person Community    schedule 13.02.2014

я думаю, что было бы лучше иметь таблицу сопоставления навыков пользователя с полями user_id и skill_id. Каждый раз, когда пользователь добавляет навык, вносите его в таблицу сопоставления, чтобы в будущем было проще использовать эти данные.

person Akhil Sidharth    schedule 13.02.2014

Необходима таблица соединения (например, skills_per_user)
В Hibernate используйте @OneToMany с @JoinTable

class UserProfile {
  @Id
  private int user_id;

  @OneToMany
  @JoinTable(name="skills_per_user",
    joinColumns={@JoinColumn(name="user_id")},
    inverseJoinColumns={@JoinColumn(name="id_skill")}
  )
  private Set<Skill> skills = new HashSet<Skill>();
}

class Skill {
  @Id
  private int skill_id;
}

и таблица соединений skill_per_user определяется как

skill_per_user
---------------------
user_id | skill_id
person Luca Basso Ricci    schedule 13.02.2014