有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

hibernate中的java映射复合外键

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

总之,我有一个通讯录,可以包含联系人和组。组也可以包含联系人,但只能包含与它们位于同一通讯簿中的联系人

通讯录
地址簿id

联系方式
id
地址簿id

集团
id
组id

联系小组
id
地址簿id
联系人id
组id

通过将addressbook id添加到多对多关系表中,我可以强制addressbook匹配。然而,我对冬眠还比较陌生,因此:

  @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控制集合,在集合中添加或修改对象时强制addressbook id匹配


共 (1) 个答案

  1. # 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>();
        //  
      }
    

    我认为,没有必要在联系人中添加收集组。您可以从“组”表中按联系人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>();
        //  
      }