2014-03-27 180 views
0

我是新來的休眠,所以不知道我是否正確地做到這一點。這是我的情況。我有一個人和一個組,一個人有一個ID,並且必須屬於一個也有ID的組。該人可以屬於多個組。一個組有一個ID和一個名字。我正在考慮創建3個表,Person表和Group表,然後有一個GroupMap表,它將person.id映射到group.id(這將是主鍵和外鍵)。這是我到目前爲止。我不知道我是在正確的軌道上還是在正確地做這件事。我可以如何製作這些外鍵?或者我應該以不同的方式設置我的表格。休眠2主鍵作爲外鍵

@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

除非您打算爲其添加更多屬性,否則沒有真正的原因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", 
     [email protected](name="GROUP_ID",referencedColumnName="ID"), 
     [email protected](name="PERSON_ID", referencedColumnName="ID")) 
    private List<Person> persons; 
} 

全部完成!