2012-03-31 56 views
2

以下是我用來表示雙向OneToMany關係的兩個類。爲什麼hibernate創建連接表以及連接列?

 
Class Contact { 
    @OneToMany 
    public Set getPhoneNumbers() { 
     return phoneNumbers; 
    } 
} 
 
Class PhoneNumber{ 
    @ManyToOne 
    public Contact getContact() { 
     return contact; 
    } 
} 

Hibernate是爲了創建一個連接表(我認爲這是對我的需要)

 
contact_phonenumber 
    -Contact_id 
    -phoneNumbers_id 

,但爲什麼它創造的phoneNumber的表

這個額外的連接列(CONTACT_ID)
 
phonenumber 
    -id 
    -contact_id 
    -... 

連接表是否不夠?

更重要的是,當我保存電話號碼或聯繫人時,連接表會更新,但不會更新連接列。那麼爲什麼這個連接列在這裏呢?

感謝您的幫助。

回答

1

我找到了一個解決方案:

 
Class Contact { 
    @OneToMany(mappedBy="contact", targetEntity=PhoneNumber.class, orphanRemoval=false) 
    public Set getPhoneNumbers() { 
     return phoneNumbers; 
    } 
} 
 
Class PhoneNumber{ 
    @ManyToOne 
    @JoinTable(name="t_join_contact_phonenumber", [email protected](name="PHONENUMBER_ID"), [email protected](name="CONTACT_ID")) 
    public Contact getContact() { 
     return contact; 
    } 
} 

現在,Hibernate是爲了創建連接表僅

 
t_join_contact_phonenumber 
    -CONTACT_ID 
    -PHONENUMBER_ID 

感謝。