Hibernate的基本標簽和映射
hibernate基本映射標簽和屬性
1.<hibernate-mapping>標簽
- <hibernate-mapping
- schema="schemaName" (1)
- catalog="catalogName" (2)
- default-cascade="cascade_style" (3)
- default-access="field|property|ClassName" (4)
- default-lazy="true|false" (5)
- auto-import="true|false" (6)
- package="package.name" (7)
- />
(1) schema (可選): 數據庫schema的名稱。
(2) catalog (可選): 數據庫catalog的名稱。
(3) default-cascade (可選 - 默認為 none): 默認的級聯風格。
(4) default-access (可選 - 默認為 property): Hibernate用來訪問所有屬性的策略。可以通過實現PropertyAccessor接口 自定義。
(5) default-lazy (可選 - 默認為 true): 指定了未明確注明lazy屬性的Java屬性和集合類, Hibernate會采取什么樣的默認加載風格。
(6) auto-import (可選 - 默認為 true): 指定我們是否可以在查詢語言中使用非全限定的類名(僅限于本映射文件中的類)。
(7) package (可選): 指定一個包前綴,如果在映射文檔中沒有指定全限定的類名, 就使用這個作為包名。 假若有兩個持久化類,它們的非全限定名是一樣的(就是兩個類的名字一樣,所在的包不一樣),應該設置auto-import="false".如果把一個“import”的名字對應兩個類,Hibernate會拋出一個異常hibernate-mapping元素允許嵌套多個<class>映射,但***的做法是一個持久化類對應一個映射文件,并以持久化的超類名稱命名。如:Xxx.hbm.xml
2.<class>標簽
- <class
- name="ClassName" (1)
- table="tableName" (2)
- dynamic-update="true|false" (3)
- dynamic-insert="true|false" (4)
- optimistic-lock="none|version|dirty|all" (5)
- lazy="true|false" (6)
- />
(1)name(可選):持久化類(或者接口)的Java全限定名。如果這個屬性不存在,Hibernate將假定這是一個非POJO的實體映射
(2)table(可選-默認是類的非全限定名):對應數據庫表名,生成DDL時數據表名,如果省略,則名稱同持久化類名稱
(3)dynamic-update(可選,默認為false):指定用于UPDATE的SQL將會在運行時動態生成,只更新那些被改過的字段
(4)dynamic-insert(可選,默認為false):指定用于insert的sql將會在運行時動態生成,并且只包含那些非空字段
(5) optimistic-lock(樂觀鎖定) (可選,默認是version): 決定樂觀鎖定的策略。
(6) lazy (可選): 通過設置lazy="false", 所有的延遲加載(Lazy fetching)功能將被全部禁用(disabled)。
3.<id>標簽
<id>標簽必須配置在<class>標簽的***個位置。由一個字段構成主鍵,<id>元素定義了該屬性到數據庫表主鍵字段的映射
- <id name="propertyName" (1)
- type="typename" (2)
- column="column_name"> (3)
- length="length"> (4)
- <generator class="generatorClass" />
- </id>
(1)name:實體類的屬性名字
(2)type:標識Hibernate類型的名字(省略則使用Hibernate默認類型),也可以自己配置類型(integer,long,short,float,double,character,byte,boolean,yes_no,true_false)
(3)column(可選-默認為屬性名):主鍵字段的名字(省略則取name為字段名)
(4)length(可選):當type為varchar時,設置字段長度
<generator>元素(主鍵生成策略)
主鍵生成策略必須配置,用來為該持久化類的實例生成唯一的標識。
uuid:
用一個128-bit的UUID算法生成字符串類型的標識符,這在一個網絡中是唯一的(使用了IP地址),UUID被編碼為一個32位16進制數字的字符串,它的生成是由Hibernate生成,一般不會重復UUID包含:IP地址,JVM的啟動時間,系統時間和一個計算器值。
native:
根據底層數據庫的能力選擇identity,sequence或者hilo中的一個(數據庫自增)
assigned:
讓程序在save()之前為對象分配一個表示符。這是<generator>元素沒有指定時的默認生成策略。(如果是手動分配,則需要設置此配置)
5.<property>標簽
用于映射普通屬性到表字段
- <property
- name="propertyName"
- column="column_name"
- type="typename"
- length=""
- unique=""
- not-null=""
- >
- </property>
注:如果實體類和實體類中的屬性和SQL中的關鍵字重復,必須采用table或column重新命名
6.Hibernate完整映射實例:
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <!--
- class標簽 實體類映射到數據表
- * name屬性:實體類的完整路徑
- * table屬性:實體類映射到數據庫中的表名,如果省略,則為實體類的類名稱
- -->
- <class name="com.wjt276.hibernate.User1">
- <!-- 映射數據庫主鍵 映射到數據表中的字段名默認為類屬性名,但可以利用column重新指定-->
- <id name="id" column="id">
- <!-- generator設置主鍵生成策略 uuid:一萬年內生成唯一的字符串 -->
- <generator class="uuid"/>
- </id>
- <!--
- property 映射普通屬性 映射到數據表中的字段名默認為類屬性名,但可以利用column重新指定
- unique:唯一約束;
- not-null:非空約束
- length:字段長度
- -->
- <property name="name" unique="true" not-null="true" length="20"/>
- <property name="password" not-null="true" length="10"/>
- <property name="createTime"/><!--Hibernate會自動根據實體類屬性類型生成數據庫表中字段類型 -->
- <property name="expireTime"/>
- </class>
- </hibernate-mapping>
原文鏈接:http://blog.csdn.net/fengxuezhiye/article/details/7368865
【編輯推薦】