2016-03-01 267 views
0

我沒有太多的數據庫設計經驗,我嘗試使用像休眠一樣的ORM來理解它背後的一般邏輯。我有兩個用戶和語言表。用戶可以知道一種或多種語言,因此兩個表之間存在一對多關係。但是我有固定的語言版本,例如英語,西班牙語和法語。據我瞭解,每個新的用戶實例持續存在,語言表中將有重複的條目與該人的外鍵。有沒有辦法阻止這個重複的條目?休眠一對多映射固定值

回答

0

你的理解有點困惑。您可以使用Foreign Key來映射OneToMany關係,並且有充足的數據庫原因可以這樣做,但通常是a JPA provider recommends against it。但是,您正在描述ManyToMany關係。 A User將(或可能)有許多Languages。 A Language將有很多Users。當您創建許多與註釋一對多的關係:

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

    @ManyToMany 
    private List<Language> languages; 

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

JPA提供者將創建一個協會或Join Table,從每個Entity在它的ID:

create table Person_Language (Person_id bigint not null, languages_id bigint not null) 

當你創建一種語言時,一個條目將被放入語言表中。當你創建一個用戶時,一個條目將被放入用戶表中。當您將語言添加到某個人的languages時,則會將一個條目放入Join Table

insert into Person_Language (Person_id, languages_id) values (?, ?) 

會有在連接表的Person_idlanguages_id只有獨特的組合,因此該數據庫將很好正常化。由於您指出的原因,您將無法使用Language實體中的Foreign Key將語言指定給多個用戶:對於任何給定的語言,只會有一個外鍵列。