Hibernate的學習筆記(4)

經過前段時間的學習,hibernate的映射關係尤其重要,須要理解的也有挺多的。數據庫

1、一對一映射學習

  1)主鍵關聯。一對一默認使用的是當即加載,若是須要時用延遲加載,那麼須要在one-to-one元素中將constrained屬性設爲true,而且將待加載的一方的class元素中的lazy屬性設爲true(或者不去設置,由於該屬性默認值就是true)。一對一加載默認使用左外鏈接,能夠經過修改fetch屬性爲select修改爲每次發送一條select語句的形式。fetch

  2)外鍵關聯。本質上一對多的蛻變形式。在many-to-one元素中增長unique=」true」屬性就變成了一對一。spa

3mapset 標籤中的element子標籤映射的是原子類型(stringdate,int,long….),即可以直接映射到數據庫表字段上的類型,而one-to-many映射的則是實體類型,指的是沒法映射到表的字段,而是要映射到整張表的類型。hibernate

4Bag(結合了ListSet),能夠重複且沒有順序的一種集合,是Hibernate提供的。對象

5、查詢排序(內存排序及數據庫排序)排序

6、數據庫排序使用order-by屬性。繼承

7、內存排序使用sort屬性,它有兩個屬性值(unsortednatural),其中的natural指的是按照天然的升序排序。第三個屬性值是咱們本身定義的排序規則類。接口

8、內存排序:有兩個屬性值能夠直接使用,分別是unsorted(不排序)以及natural(天然排序,即升序),此外,咱們還能夠自定義排序規則,方式是定義一個類,讓其實現Comparator接口,而且實現該接口中的compare方法,在該方法中實現排序規則便可。而後將該自定義排序規則的類名做爲sort的屬性便可。內存

9、聯合組建的映射規則

   1)類中的每一個主鍵屬性都對應到數據表中的每一個主鍵列。Hibernate要求具備 聯合主鍵的實體類實現Serializable接口,而且重寫hashCodeequals方法,重寫這兩個方法的緣由在於hibernate要根據數據庫的聯合主鍵來判斷兩行記錄是不是同樣的,若是同樣那麼就認爲是同一的對象。這反映到程序領域中就是根據hashCodeequals方法來判斷某兩個對象是否能都放到諸如Set這樣的集合當中。 聯合主鍵的實體實現Serializable接口的緣由在於使用get load方法的時候須要先構建出來該實體的對象,而且將查詢依據(聯合主鍵)設置進去,而後做爲getload方法的第二個參數傳進去便可。

2)將主鍵所對應屬性提取出一個類(稱之爲主鍵類),而且主鍵類須要實現Serializable接口,重寫equals方法與hashCode方法,緣由與上面同樣。

10、繼承映射

1)每一個子類一張表

2)一張表存儲繼承體系中全部類的信息(數據庫表其實是繼承體系中全部類的屬性並集所構成的字段

      

須要在hbm文件中增長以下一行:

<discriminator column="personType" type="string"></discriminator>

   3)公共信息放在父類表中,獨有信息放在子類表中,每個子類對應一張表。

相關文章
相關標籤/搜索