Java 将2个主键休眠为外键

Java 将2个主键休眠为外键,java,mysql,sql,hibernate,jpa,Java,Mysql,Sql,Hibernate,Jpa,我刚开始冬眠,所以不知道我是否做得对。这是我的情况。我有一个人和一个团体,一个人有一个ID并且必须属于一个也有ID的团体。这个人可以属于多个团体。组有一个ID和一个名称。我想创建3个表,一个Person表和一个Group表,然后创建一个GroupMap表,将Person.id映射到Group.id(主键和外键)。这是我到目前为止所拥有的。我不知道我是否在正确的轨道上,或者做得对。我怎样才能做这些外键?或者我应该以不同的方式设置我的桌子 @Entity public class Person im

我刚开始冬眠,所以不知道我是否做得对。这是我的情况。我有一个人和一个团体,一个人有一个ID并且必须属于一个也有ID的团体。这个人可以属于多个团体。组有一个ID和一个名称。我想创建3个表,一个Person表和一个Group表,然后创建一个GroupMap表,将Person.id映射到Group.id(主键和外键)。这是我到目前为止所拥有的。我不知道我是否在正确的轨道上,或者做得对。我怎样才能做这些外键?或者我应该以不同的方式设置我的桌子

@Entity
public class Person implements Serializable {  
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;

   private String name;

}


@Entity
public class Group implements Serializable {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;

   @Basic(optional = false)
   @Column(unique = true)
   private String name;
}

@Entity
public class GroupMap{
  @EmbeddedId
  private GroupPerson ids; 
}

@Embeddable
class GroupPerson implements Serializable {

  private Long person_id; //SHOULD BE FOREIGN KEY FROM person.id

  private Long group_id;  //SHOULD BE FOREIGN KEY FROM group.id

}

除非您计划向GroupMap添加更多属性,否则GroupMap完全没有理由成为一个单独的实体

@Entity
public class Person implements Serializable {  
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;

   private String name;

   @ManyToMany(mappedBy="persons")
   private List<Group> groups;

}


@Entity
public class Group implements Serializable {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;

   @Basic(optional = false)
   @Column(unique = true)
   private String name;

  @ManyToMany()
  @JoinTable(name="group_map",
        joinColumns=@JoinColumn(name="GROUP_ID",referencedColumnName="ID"),
        inverseJoinColumns=@JoinColumn(name="PERSON_ID", referencedColumnName="ID"))
  private List<Person> persons;
}
@实体
公共类Person实现可序列化的{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串名称;
@许多人(mappedBy=“个人”)
私人名单组;
}
@实体
公共类组实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@基本(可选=假)
@列(唯一=真)
私有字符串名称;
@许多
@JoinTable(name=“group\u map”,
joinColumns=@JoinColumn(name=“GROUP\u ID”,referencedColumnName=“ID”),
inverseJoinColumns=@JoinColumn(name=“PERSON\u ID”,referencedColumnName=“ID”))
私人名单人员;
}
全部完成