Hibernate(五) 經典解析一對一關聯對映

2021-08-27 13:10:04 字數 1505 閱讀 2445

前面兩篇介紹了多對

一、一對多的對映。今天分享下一對一的關聯對映關係。有兩種策略可以實現一對一的關聯對映:主鍵關聯、唯一外來鍵關聯。

主鍵關聯——兩個表有完全相同的主鍵值,來表示它們的一對一的關係。資料庫中沒有額外的字段去維護它們之間的關係,就只是靠著主鍵來維持關係。

唯一外來鍵關聯——增加乙個額外的字段,維護他們之間的一對一關係。

現在要用一對一來描述人和身份證的關係。每個人只有乙個身份證。

1、單向主鍵關聯進行描述

根據上圖,我們需要在person端進行如下配置:

<?xml version="1.0"?>

idcard

主鍵生成策略使用foreign,它能夠取得關聯物件的標識。上面**中「constrained='true'」表示當前主鍵(person的主鍵)還是乙個外來鍵,參照了對端的主鍵(idcard的主鍵),也就是會生成外來鍵約束語句。

2、單向唯一外來鍵關聯

根據上圖,我們需要對person進行如下配置:

<?xml version="1.0"?>

唯一外來鍵關聯的主鍵生成策略不像主鍵關聯那樣必須使用foreign外來鍵生成策略,這裡採用的是native。另外一對一的關係採用多對一的配置+唯一的限制,來表示一對一的關聯關係。

3、雙向主鍵關聯進行描述

該種情況,我們仍然在person端維護關係字段,而且不能夠在idcard再維護關係。如果在idcard端也維護關係,兩段都維護主鍵,那麼就會產生混亂。所以,此處的雙向,我們單隻載入的時候,也可以從idcard方載入上來。

在雙向關係中,還需要將關係配置在idcard中,對idcard進行如下配置:

<?xml version="1.0"?>

雙向一對一主鍵關聯對映需要在idcard加入標籤,指是hibernate將關聯物件person根據主鍵載入上來。

4、雙向唯一外來鍵關聯描述

此處的雙向同上面提到的雙向的概念一致,關係還是只是person端維護,這裡雙向只是指從idcard端能夠載入上來。

idcard端關係:

<?xml version="1.0"?>

一對一雙向外來鍵關聯採用標籤對映,必須執行該標籤中的property-ref屬性為關係欄位的名稱。

一對一的關聯對映,經常使用的還是單向唯一外來鍵關聯。主鍵關聯的方式擴充套件性不好,而且不太靈活。兩種方式的區別在文章開頭也有提到,對映方式肯定是不同的,另外在資料庫表也有不同,主鍵關聯的方式不會使用額外的字段來維護關係,而唯一外來鍵關聯方式需要在一端使用額外的字段維護關係。

67 經典問題解析五

1 面試問題 編寫程式判斷乙個變數是不是指標。2 指標的判別 c 中依然支援 c語言中的可變引數函式 c 編譯器的匹配呼叫優先順序 1 過載函式 2 函式模板 3 變參函式 接收任意多的引數 include using namespace std void test int i 優先順序第一 tem...

十二 經典問題解析一

const什麼時候為唯讀變數,什麼時候是常量 const常量的判別準則 在編譯期間不能直接確定初始值的const識別符號,都被作為唯讀變數處理 const引用的型別與初始化變數的型別 include int main 引用與指標有什麼關係?如何理解 引用的本質就是指標常量 指標是乙個變數 引用只是乙...

六十七課 經典問題解析五

1 編寫程式判斷乙個變數是不是指標 過載函式 函式模板 變參函式 2 思路 示例 指標判斷 include include using namespace std class test virtual test template char isptr t v int isptr define isp...