【问题标题】:How to maintain relationship between two tables.?如何维护两个表之间的关系。?
【发布时间】:2014-03-12 03:48:29
【问题描述】:
我有两张桌子,一张是USERPROFILE,另一张是SKILLS。
两个表都包含数据。一个用户可以拥有多个技能,一个技能可以属于多个用户。 我应该如何维护他们之间的关系..?
我在UserProfile 表中添加了一对多的关系。
但是当我将技能对象分配给userprofile 并尝试保存它时,出现异常。
在另一种情况下,如果我创建新的技能对象并分配给userprofile 并保存userprofile 对象,那么它就会被保存。但是为相同的技能生成了新的 id。
我不想要这个,我想保持两个表之间的关系而不生成新的 id。
【问题讨论】:
标签:
mysql
hibernate
hibernate-mapping
hibernate-annotations
【解决方案1】:
我认为最好有一个包含字段 user_id 和 Skill_id 的用户技能映射表。每次用户添加技能时,将其输入到映射表中,以便将来使用此数据更容易
【解决方案2】:
您应该为 Skills 和 UserProfile 使用映射表,这将只保留两个表中的 id
它将帮助您检索用户的所有技能。以及所有拥有该技能的用户
它的结构应该是这样的
user_skills
----------------------
ID | skill_id | user_id
【解决方案3】:
需要一个连接表(例如,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