如何保持两个表之间的关系。

时间:2014-02-13 10:19:12

标签: mysql hibernate hibernate-mapping hibernate-annotations

我有两个表格USERPROFILE,另一个表格是SKILLS。

两个表都包含数据。一个用户可以拥有许多技能,一个技能可能属于许多用户。 我应该如何保持他们之间的关系..?

我在UserProfile表中添加了与一对多技能相关的关系。 但是当我将技能对象分配给userprofile并尝试保存它时,获得异常。 在另一种情况下,如果我创建新的技能对象并分配给userprofile并保存userprofile对象,则保存它。但是为同一技能生成了新的id。

我不想要这个,我想保持两个表之间的关系而不生成新的ID。

3 个答案:

答案 0 :(得分:2)

你应该使用SkillsUserProfile的映射表,它只保留两个表的id

它将帮助您检索用户的所有技能。还有所有拥有该技能的用户

它的结构应该是这样的

user_skills
----------------------
ID  |  skill_id  | user_id

答案 1 :(得分:0)

我认为拥有一个包含字段user_id&的用户技能映射表应该会更好。 skill_id也。每次用户添加技能时,请在映射表中输入,以便将来更容易使用此数据

答案 2 :(得分:0)

联接表是必要的(例如,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