2013-07-24 40 views
0

我有一個只有兩個表使用MySQL數據庫的JPA2(Hibernate)應用程序。一張桌子叫做「公司」,另一張桌子叫做「僱員」。在兩張桌子之間有一對多的關係(1家公司有很多員工)。表「employees」中的外鍵列稱爲「company_id」。JPA 2一對多 - JPA如何推斷列信息?

在我JPA2應用我用下面的註釋:

在實體類「公司」我有以下注釋

@OneToMany(cascade = CascadeType.ALL) 
private Collection<Employee> employees; 

,並在類員工

@ManyToOne 
private Company company; 

如何JPA知道應該使用哪個列來確定公司的所有員工。註釋不包含這些信息,但應用程序有效。

謝謝

回答

2

ManyToOne側缺少可選JoinColumn註釋,這反過來又可選name屬性默認爲:

下面的連接:在引用關係屬性的名稱或引用實體或可嵌入類的字段; 「(下劃線)」;被引用的主鍵列的名稱。如果實體中沒有這種引用關係屬性或字段,或者如果聯接是針對元素集合的,則聯接列名稱將形成以下各項的連接形式:實體的名稱; 「(下劃線)」;被引用的主鍵列的名稱。

在關係的另一邊,OneToMany邊,它缺少mappedBy屬性(它應該等於擁有的關係,你的情況「公司」字段的名稱)。 Javadoc說除非關係是單向的,否則這個屬性是必需的,所以你使用的JPA實現有可能假設關係是單向的。

+0

不錯!這可以解釋爲什麼我的代碼只是在沒有我的代碼給出的任何相關信息的情況下開箱即可使用。謝謝! – xSNRG