Hibernate系列學習之對映持久化類--Hibernate中實體型別和值型別概念辨析
阿新 • • 發佈:2019-02-05
一、前言
在學習Hibernate的對映 持久化類部分時,遇到兩個概念–實體型別、值型別,一直搞不明白,現在將自己的理解整理一下。
二、概念辨析
2.1前言
當檢視域模型時,你將會注意到類之間的一個區別:有些型別看起來更為重要,它們表示了最重要的業務物件(這裡的物件一詞就是其本身的意思)。例子有Item、Category和User類:這些都是我們要嘗試表示的真實環境中的實體。區域模型中呈現的其他型別,比如Address、String和Integer,看起來不那麼重要。那麼,究竟什麼是實體型別,什麼又是值型別呢,它們的區別是什麼呢。
2.2實體型別
在這裡,實體型別沒有很嚴格的定義,下面是將實體型別的特點進行總結對實體型別做的一個籠統的概念定義:
有自己的標識、其例項具有來自許多其他例項的引用、並且擁有獨立的生命週期,就稱之為實體型別。
2.3值型別
在這裡,值型別沒有很嚴格的定義,下面是將值型別的特點進行總結對值型別做的一個籠統的概念定義:
沒有自己的標識、其例項只能被單個特定的例項所引用、並且生命週期依賴於引用它的那個例項,就稱之為值型別。
2.4二者的理解和辨析
2.4.1下面以一個原型圖進行理解:
2.4.1.1圖解:
2.4.1.2解析
現有三個實體類:Item、Bid、User,和一個值型別類。
顯然物品類Item既可以被拍賣品類Bid引用,也可以被使用者類User類引用,而使用者地址只能被User類所引用,因為很顯然Item和Bid類是沒有Address的相關屬性的。
2.2.2下面以一個表格進行橫向辨析:
比較項 | 實體型別 | 值型別 |
物件中,是否存在用以標識該物件的屬性(如果主鍵是複合主鍵,可能是多個),而該屬性在資料庫中有其對應的主鍵 | 存在,而類中對應主鍵的屬性,則用來標識對 | 沒有,因此物件本身沒有用來標識物件的屬性(但是該類可能會有專屬的Table,只是Table中的主鍵,並不會對應到物件中的任一屬性) |
能否被一個以上的物件所引用 | 能,被其他物件引用時,在資料庫內通過外來鍵來關聯,也正因為可以被一個以上的物件所引用,因此要具備用來標識的屬性 | 否 |
生命週期是否獨立 | 是 | 否,取決於所依賴的類 |