1.多對一映射
2.一對多映射
一對多:
不是說一個部門對應(yīng)多個employees集合.
而是說一個部門對于employees集合中的多個元素(員工).
3.雙向多對一映射
選擇
任何時候,都可以直接刪除many方.
在雙向的one2many/many2one中,
1,inverse=false的時候,可以直接刪除one方(先把所有many方的外鍵設(shè)置為空);
2,inverse=true的時候,不能直接刪除one方;(外鍵約束--->HQL)
開發(fā)中多對一,一對多,單向和雙向的選擇?
1:絕大多數(shù)的大多數(shù)情況都是使用:單向的many2one即可.
在開發(fā)中,添加many方數(shù)據(jù)的時候,都是通過下拉列表選擇one方.
2:少數(shù)情況,會使用雙向的多對一(對象成樹狀結(jié)構(gòu)(自連接查詢/部門)/組合關(guān)系).
但是注意,此時inverse一定要設(shè)置為true.
3:很難使用到one2many.
使用雙向管理映射,至少都會發(fā)生5條SQL.
先保存部門,再保存員工.
通過分析SQL,發(fā)現(xiàn)其實只需要前3條SQL就可以完成數(shù)據(jù)保存操作.
后面兩天UPDATE語句,是因為one方也想維護關(guān)系,故意發(fā)出的.
如此一來,性能就低了.
如果是雙向關(guān)聯(lián)映射,我們要讓one方放棄管理,(one方不負責(zé)關(guān)系維護).
4.一對一(略)
5.多對多(略)
6.映射枚舉類型
枚舉對象:有序號(ordinal,從0開始)和元素名稱(MAN).
所以:我要表示user.setGender(Gender.WOMAN);
Gender.WOMAN存儲到數(shù)據(jù)庫有兩種形式:
第一種:使用序號1來存儲(默認).
第二種:使用元素名WOMAN做存儲.
7.組件映射(略)
問題1:之前設(shè)計one2one的時候,是讓customer表和customerprofile表分別存儲信息.
其實,我們可以使用一張表來存儲客戶的基本信息和拓展信息.怎么做?
問題2:上圖的公司的對象的營業(yè)地址和注冊地址如何做配置.
在一個宿主對象中,如果出現(xiàn)了兩個相同的組件對象,一定要修改列的名稱.