Hibernate征途(六)之數量和關係對映

2021-09-08 17:00:21 字數 1851 閱讀 1376

本來如果和關係模型一樣,只需要一對

一、一對多、多對多對映就夠了,但是前面《hibernate征途(四)之對映 序》中說到,物件模型中關聯是有方向的,所以對一對多而言,就會產生一對多還是多對一的問題,同時一種對映會產生兩種方向,簡單羅列

一下如下:

鑑於前面提到的理由,我不會對每個對映細粒度分析,以下我們從類屬性、對映檔案、資料庫表來解釋一下這些對映。

上面羅列的對映都提到方向的問題,在前面的部落格中提到物件模型的關聯是有方向的,也對這種方向做了簡單的闡述,下面我們用班級classes和學生student兩個類來說明一下方向:

student

public class student
classes

public class classes
很明顯,這種情況下,知道student和classes哪個物件都不知道另外乙個物件的存在。

student

public class student
classes

public class classes
在這種情況下,知道乙個student物件,就可以知道它多對應的claases物件,反之則不行,這為單向;同樣,如果在classes中也新增對student的引用,就是雙向關聯,此時二者可以相互知道對方的存在。

綜合上面所說,所謂的方向性,就是是否有另外乙個物件的引用,當然因為還需要hibernate的對映檔案中新增屬性的對映;同時這種方向性並不會影響到資料的儲存結構。

抽離上面說到的方向,文章最開始提到的多種對映可以分為:一對一對映、多對一對映、一對多對映和多對多對映。如果從關係模型上看,這種數量對應的儲存之間的關聯,如果從物件模型上看,我認為它的意思是一種物件包含或引用另外一種物件的數量關係,這種關係最直接的體現在屬性和對映上面,同時多對一還是一對多基於的角度不同,例如以一對多雙向對映中的student和classes為例:

從student的角度看,有關classes的屬性為:

private classes classes;
對映檔案中關於classes的為:

從classes的角度看,有關student的屬性為:

private set students;
對映檔案中關於students的為:

說到這裡,再說一下對映檔案與表中列的關係,最開始的部落格就說到,property和id標籤都會產生對應的資料列,那麼對映檔案中關於數量的標籤會不會產生列?這取決於對應方式。

綜上來看,「數量」說的是引用的方式(一還是多)及對應的數量對映標籤。

上面抽離出數量和方向,接下來把最上面羅列的對映大體分析一下。

如果是一對一的對映,會有兩種方式:

一對多和多對一對映的原理是相同的,都是在多的一端加入乙個外來鍵關聯,二者之間的區別是在於維護的關係不同,仍然以student和classes為例:

它們是多指向一的關係,通過維護這個關係,在載入多的一端時,可以把一的一端一起載入。

它是一指向多的關係,維護二者的關係,在載入一的一端的時候可以把多的一端載入上來。

在關係模型中,多對多的關係會使用中間表維護,對映到物件模型中一樣。以角色role和使用者user為例:

role

user

在多對多中,把關係表與其中一張實體表理解成多對一的關係,更有助於理解。

這篇部落格沒有針對每種對映說明,只是抽象出這些數量和方向型對映的共性,希望可以給大家一些理解的思路。下篇部落格介紹組合主鍵對映和集合對映。

Hibernate征途(二)之基礎與核心

根據我司優良傳統,必然要由上向下 逐級深入,所以在鑽到hibernate細節之前,先從巨集觀上行欣賞一下hibernate。為什麼說是欣賞?大家可以自行查閱一下hibernate知識外的資訊,創始人和hibernate的 都挺有意思。單純地說乙個框架的優缺點沒什麼用處,但是當結合使用時,知道其優缺點...

hibernate學習筆記(六)

users表屬性包括 id name passwd message表屬性包括 id sender getter content sendtime attachment 2.建立我們的web專案 3.引入struts開發包 在專案名上右鍵,選擇myeclipse,再選擇add struts capab...

Hibernate 六 快取策略

快取 快取就是資料庫資料在記憶體中的臨時容器,包括資料庫資料在記憶體中的臨時拷貝,它位於資料庫與資料庫訪問中間層,orm在查詢資料時,首先會根據自身的快取管理策略,在快取中查詢相關資料,如果發現所需的資料,則直接將此資料作為結果加以使用,從而避免資料庫呼叫效能的開銷,而相對記憶體操作而言,資料庫呼叫...