hibernate中註解方式中的控制反轉

來源:互聯網
上載者:User

標籤: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中註解方式中的控制反轉

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.