Hibernate 2主键作为外键

时间:2014-03-27 00:53:23

标签: java mysql sql hibernate jpa

我是新来的冬眠,所以我真的不知道我是否正确地做到了这一点。这是我的情况。我有一个人和一个组,一个人有一个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

}

1 个答案:

答案 0 :(得分:1)

除非你打算为它添加更多属性,否则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;
}

全部完成!