標籤:cad query 表之間 art nat employees pid app 方便
都知道hibernate用xml方式配置關係時(one-to-many,many-to-many)可以添加控制反轉屬性 inverse=false(預設)
即將兩表之間的關係交給對方來維護.
inverse=true表示本方不維護關係,有對方維護關係
但是需注意的是,one-to-one關係是沒有控制反轉的,只能交由外鍵來維護關係.
從而導致在設定關係時,只能有外鍵方設定,移除關係時,只能從外鍵方來解除關係,刪除記錄時,只能先刪外鍵方,在刪主鍵方(save,remove,delete)
如果有控制反轉的話,就方便的多,兩表之間可以互相設定關係,互相解除關係,刪除時,刪除主鍵方時,會將外鍵方的外鍵置為空白值()不過這樣不推薦)
那麼在hiebernate註解方式下(在沒有xml配置的情況下)是如何設定控制反轉的,如何在onetoMany ,manytomany中相互設定關聯了?
當然inverse對get/query沒有任何影響
一般控制反轉(維護關係)都交給多方(外建方)來維護,學生記教室容易,教室記學生麻煩
原則:
1.one-to-one不添加控制反轉,由外鍵維護關係
2.由多方維護關係,
主表方不維護主鍵關係
<set name="employees" inverse="true">
<key column="departmentId"></key>
<one-to-many class="Employee"/>
</set>
子表方(外鍵方) many to one不設定inverse屬性(預設為inverse=false) 你寫了反倒會出錯 同理在annotation中many to one也不能寫mappedBy (預設都是由對方控制的)
在one-to-one 雙向關聯中 外鍵方維護關係
@JoinColumn(name=" ",unique=".") //設定外鍵 inverse=false
@OneToOne(cascade=CascadeType.ALL)@JoinColumn(name="pid",unique=true)public IdCard getIdCard() {return idCard;}
主鍵方mappedBy="子表外鍵對象" //inverse=true
many-to-many 有一方維護外鍵關係就行了
因此設定了一方關係 另一方@ManyToMany()不設定mappedBy就可以互相維護關係(但是不推薦)
mappedBy ===inverse=true
many-to-one 不寫
hibernate中註解方式中的控制反轉