經過前段時間的學習,hibernate的映射關係尤其重要,須要理解的也有挺多的。數據庫
1、一對一映射學習
1)主鍵關聯。一對一默認使用的是當即加載,若是須要時用延遲加載,那麼須要在one-to-one元素中將constrained屬性設爲true,而且將待加載的一方的class元素中的lazy屬性設爲true(或者不去設置,由於該屬性默認值就是true)。一對一加載默認使用左外鏈接,能夠經過修改fetch屬性爲select修改爲每次發送一條select語句的形式。fetch
2)外鍵關聯。本質上一對多的蛻變形式。在many-to-one元素中增長unique=」true」屬性就變成了一對一。spa
3、map與set 標籤中的element子標籤映射的是原子類型(string,date,int,long….),即可以直接映射到數據庫表字段上的類型,而one-to-many映射的則是實體類型,指的是沒法映射到表的字段,而是要映射到整張表的類型。hibernate
4、Bag(結合了List與Set),能夠重複且沒有順序的一種集合,是Hibernate提供的。對象
5、查詢排序(內存排序及數據庫排序)排序
6、數據庫排序使用order-by屬性。繼承
7、內存排序使用sort屬性,它有兩個屬性值(unsorted,natural),其中的natural指的是按照天然的升序排序。第三個屬性值是咱們本身定義的排序規則類。接口
8、內存排序:有兩個屬性值能夠直接使用,分別是unsorted(不排序)以及natural(天然排序,即升序),此外,咱們還能夠自定義排序規則,方式是定義一個類,讓其實現Comparator接口,而且實現該接口中的compare方法,在該方法中實現排序規則便可。而後將該自定義排序規則的類名做爲sort的屬性便可。內存
9、聯合組建的映射規則
1)類中的每一個主鍵屬性都對應到數據表中的每一個主鍵列。Hibernate要求具備 聯合主鍵的實體類實現Serializable接口,而且重寫hashCode與equals方法,重寫這兩個方法的緣由在於hibernate要根據數據庫的聯合主鍵來判斷兩行記錄是不是同樣的,若是同樣那麼就認爲是同一的對象。這反映到程序領域中就是根據hashCode與equals方法來判斷某兩個對象是否能都放到諸如Set這樣的集合當中。 聯合主鍵的實體實現Serializable接口的緣由在於使用get 或load方法的時候須要先構建出來該實體的對象,而且將查詢依據(聯合主鍵)設置進去,而後做爲get或load方法的第二個參數傳進去便可。
2)將主鍵所對應屬性提取出一個類(稱之爲主鍵類),而且主鍵類須要實現Serializable接口,重寫equals方法與hashCode方法,緣由與上面同樣。
10、繼承映射
1)每一個子類一張表
2)一張表存儲繼承體系中全部類的信息(數據庫表其實是繼承體系中全部類的屬性並集所構成的字段)
須要在hbm文件中增長以下一行:
<discriminator column="personType" type="string"></discriminator>
3)公共信息放在父類表中,獨有信息放在子類表中,每個子類對應一張表。