2016-07-16 28 views
0

我有很難理解下面的一段documentation 所有者什麼是評論地圖一對多側

我們需要複製的物理

手段?

使用insertable = false,updatable = false有什麼意義?
拜託,你能幫忙嗎?

要映射雙向一對多,與一個一對多側爲 持有端,你必須刪除的mappedBy元素,並設置許多 一個@JoinColumn的插入和更新爲假。此解決方案 未優化,並會生成一些額外的UPDATE語句。

@Entity 

public class Troop { 

    @OneToMany 

    @JoinColumn(name="troop_fk") //we need to duplicate the physical information 

    public Set<Soldier> getSoldiers() { 

    ... 

} 


@Entity 

public class Soldier { 

    @ManyToOne 

    @JoinColumn(name="troop_fk", insertable=false, updatable=false) 

    public Troop getTroop() { 

    ... 

} 
+0

在'Soldier'類的另一個'@ Column'中引用了'troop_fk'嗎? –

回答

1

我們需要複製的物理

這是否意味着Hibernate會鏈接到troop_fkSoldier實體與實體Troop連接。我們必須編寫連接TroopSoldier的列的物理名稱。

使用insertable = false,updatable = false有什麼意義?

因爲它是Troop實體的外鍵,並且由於約束您無法對其進行編輯。首先創建Troop,然後在此Troop中添加Soldier

這個例子關於OneToMany當擁有方的地圖是OneToMany方,所以這方有自己的關係,我們假設這方創建的第一個。您可以刪除insertable=false, updatable=false,但是如果您在數據庫中有約束並嘗試使用新的Troop對象創建Soldier,則可以獲取約束違規錯誤,因爲此新表中存在Troop實體Troop

+0

如果我們不使用這些註釋,該怎麼辦:insertable = false,updatable = false? – GionJh

+0

@GionJh加個回答 –

+0

謝謝,真是太好了! – GionJh