【问题标题】: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】:

      您应该为 SkillsUserProfile 使用映射表,这将只保留两个表中的 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-19
          • 2016-06-27
          • 2017-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多