在hibernate中映射复合外键

时间:2011-08-05 11:44:06

标签: java hibernate hibernate-annotations

我问了一个关于如何设计数据库模式的问题here

总之,我有一个可以包含联系人和群组的地址簿。群组也可以包含联系人,但只包含与他们在同一地址簿中的联系人。

通讯录
地址簿id


ID
地址簿id


ID
组ID

要联系的群组
ID
地址簿号码
联系人ID
组ID

通过将地址簿ID添加到多对多关系表,我可以强制执行地址簿匹配。然而,我对hibernate相对较新,所以:

  @Entity
  @Table(name = "Contact")
  public class Contact 
  {
    Addressbook addressbook;

    //----bidirectional association
    private List groups = new ArrayList();
    //----
  }

  @Entity
  @Table(name = "Group")
  public class Group 
  {
    Addressbook addressbook;
    //----bidirectional association
    private List contacts = new ArrayList();
    //----
  }

所以在一个起点上,我将拥有上面的两个表,并且我需要通过hibernate控制集合,以便在添加或修改集合中的对象时强制执行地址簿id的匹配。 / p>

1 个答案:

答案 0 :(得分:1)

您需要指定集合中的元素类型并添加注释ManyToMany

  @Entity
  @Table(name = "Contact")
  public class Contact 
  {

    @Id
    @GeneratedValue(GenerationType=AUTO)
    private Integer contact_id;

    Addressbook addressbook;

    //----bidirectional association
    //@ManyToMany
    //private List<Group> groups = new ArrayList<Group>();
    //----
  }

我认为,无需向Contact添加收藏组。您可以按“组”表中的联系人ID选择组。此外,您需要为每个表添加id。

  @Entity
  @Table(name = "Group")
  public class Group 
  {
    @Id
    @GeneratedValue(GenerationType=AUTO)
    private Integer group_id;

    Addressbook addressbook;
    //----bidirectional association
    @ManyToMany
    private List<Contact> contacts = new ArrayList<Contact>();
    //----
  }