91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

正確理解hibernate的inverse! many-to-many(轉)

發布時間:2020-08-10 22:34:37 來源:ITPUB博客 閱讀:92 作者:rainytag 欄目:編程語言

Inverse是hibernate雙向關系中的基本概念,當然對于多數實體,我們并不需要雙向關聯,更多的可能會選擇單向關聯,況且我們大多數人一般采用一對多關系,而一對多雙向關聯的另一端:多對一的inverse屬性是不存在,其實它默認就是inverse=false.從而防止了在一對多端胡亂設置inverse也不至于出錯。但是inverse設置不當確實會帶來很大的性能影響,這點是我們必須關注的。

這篇文章已經詳細分析了inverse設置不當帶來的影響:

http://www.hibernate.org/155.html

看了這篇文章,還是很有必要再寫下一些總結的:

1)inverse中提及的side其實是指一個類或者表的概念,雙向關聯其實是指雙方都可以取得對方的應用。

2)維護關系這個名詞還是稍顯模糊或者晦澀。我們一般說A類或者A表(這里的表的是指多對多的連接表)有責任維護關系,其實這里的意思是說,我在應用在更新,創建,刪除(讀就不用說了,雙向引用正是為了方便讀而出現)A類或者A表時,此時創建的SQL語句必須有責任保證關系的正確修改。

3)inverse=false的side(side其實是指inverse=false所位于的class元素)端有責任維護關系,而inverse=true端無須維護這些關系。

4)我們說inverse設立不當會導致性能低下,其實是說inverse設立不當,會產生多余重復的SQL語句甚至致使JDBC exception的throw。這是我們在建立實體類關系時必須需要關注的地方。一般來說,inverse=true是推薦使用,雙向關聯中雙方都設置 inverse=false的話,必會導致雙方都重復更新同一個關系。但是如果雙方都設立inverse=true的話,雙方都不維護關系的更新,這也是不行的,好在一對多中的一端:many-to-one默認是inverse=false,避免了這種錯誤的產生。但是對多對就沒有這個默認設置了,所以很多人經常在多對多的兩端都使用inverse=true,結果導致連接表的數據根本沒有記錄,就是因為他們雙分都沒有責任維護關系。所以說,雙向關聯中最好的設置是一端為inverse=true,一端為inverse=false。一般inverse=false會放在多的一端,那么有人提問了, many-to-many兩邊都是多的,inverse到底放在哪兒?其實hibernate建立多對多關系也是將他們分離成兩個一對多關系,中間連接一個連接表。所以通用存在一對多的關系,也可以這樣說:一對多是多對多的基本組成部分。

[@more@]
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

葵青区| 旬邑县| 育儿| 平定县| 建湖县| 苏州市| 革吉县| 噶尔县| 云安县| 阿拉善左旗| 海晏县| 泾源县| 汕头市| 兰州市| 江永县| 青龙| 陆川县| 长乐市| 德昌县| 锡林浩特市| 宜川县| 宿松县| 安塞县| 桃园市| 景泰县| 勃利县| 宜春市| 长丰县| 桐柏县| 信阳市| 奉新县| 康保县| 金昌市| 屏山县| 安阳县| 铜陵市| 黔南| 衡东县| 汾西县| 土默特右旗| 堆龙德庆县|