1. 程式人生 > >物件關係對映檔案(*.hbm.xml)詳解

物件關係對映檔案(*.hbm.xml)詳解

物件關係對映檔案,即POJO 類和資料庫的對映檔案*.hbm.xml(對映檔案的副檔名為 .hbm.xml)。

POJO 類和關係資料庫之間的對映可以用一個XML文件來定義。

通過 POJO 類的資料庫對映檔案,Hibernate可以理解持久化類和資料表之間的對應關係,也可以理解持久化類屬性與資料庫表列之間的對應關係。

在執行時 Hibernate 將根據這個對映檔案來生成各種 SQL 語句。

常見結構如下:

hibernate-mapping
	-類層次:class
		--主鍵:id
		--基本型別:property
		--實體引用類: many-to-one  |  one-to-one
		--集合:set | list | map | array
			---one-to-many
			---many-to-many
		--子類:subclass | joined-subclass
		--其它:component | any 等	
	-查詢語句:query(用來放置查詢語句,便於對資料庫查詢的統一管理和優化)

每個Hibernate-mapping中可以同時定義多個類. 但更推薦為每個類都建立一個單獨的對映檔案。

① hibernate-mapping節點

hibernate-mapping節點屬性如下: 在這裡插入圖片描述

hibernate-mapping 是 hibernate 對映檔案的根元素。

  • schema: 指定所對映的資料庫schema的名稱。若指定該屬性, 則表明會自動新增該 schema 字首。
  • catalog:指定所對映的資料庫catalog的名稱。
  • default-cascade(預設為 none): 設定hibernate預設的級聯風格. 若配置 Java 屬性, 集合對映時沒有指定 cascade 屬性, 則 Hibernate 將採用此處指定的級聯風格。
  • default-access (預設為 property): 指定 Hibernate 的預設的屬性訪問策略。預設值為 property, 即使用 getter, setter 方法來訪問屬性。若指定 access, 則 Hibernate 會忽略 getter/setter 方法, 而通過反射訪問成員變數。
  • default-lazy(預設為 true): 設定 Hibernat morning的延遲載入策略. 該屬性的預設值為 true, 即啟用延遲載入策略. 若配置 Java 屬性對映, 集合對映時沒有指定 lazy 屬性, 則 Hibernate 將採用此處指定的延遲載入策略 。
  • auto-import (預設為 true): 指定是否可以在查詢語言中使用非全限定的類名(僅限於本對映檔案中的類)。
  • package (可選): 指定一個包字首,如果在對映文件中沒有指定全限定的類名, 就使用這個作為包名。

② class節點

class節點屬性如下:

在這裡插入圖片描述

class 元素用於指定類和表的對映

  • name:指定該持久化類對映的持久化類的類名。
  • table:指定該持久化類對映的表名, Hibernate 預設以持久化類的類名作為表名。
  • dynamic-insert: 若設定為 true, 表示當儲存一個物件時, 會動態生成 insert 語句, insert 語句中僅包含所有取值不為 null 的欄位. 預設值為 false。
  • dynamic-update: 若設定為 true, 表示當更新一個物件時, 會動態生成 update 語句, update 語句中僅包含所有取值需要更新的欄位。預設值為 false。
  • select-before-update:設定 Hibernate 在更新某個持久化物件之前是否需要先執行一次查詢,預設值為 false。
  • batch-size:指定根據 OID 來抓取例項時每批抓取的例項數。
  • lazy: 指定是否使用延遲載入,預設為true。
  • mutable: 若設定為 true, 等價於所有的 <property> 元素的 update 屬性為 false, 表示整個例項不能被更新。 預設為 true。
  • discriminator-value: 指定區分不同子類的值。當使用<subclass/>元素來定義持久化類的繼承關係時需要使用該屬性。