Hibernate*.hbm.xml詳解(常用的)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 建立類與表的映射 -->
<class name="com.jjxy.hibernate.Customer" table="cst_customer">
<!-- 建立類中的屬性與表中的主鍵對應 -->
<id name="cust_id" column="cust_id" >
<!-- 主鍵的生成策略 -->
<generator class="native"/>
</id>
<!-- 建立類中的普通的屬性和表的字段的對應 -->
<property name="cust_name" column="cust_name" length="32" />
<property name="cust_source" column="cust_source" length="32"/>
<property name="cust_industry" column="cust_industry"/>
<property name="cust_level" column="cust_level"/>
<property name="cust_phone" column="cust_phone"/>
<property name="cust_mobile" column="cust_mobile"/>
</class>
</hibernate-mapping>
其中重要的元素有:
DOCTYPE:hibernate-core-5.0.7.Final.jar 中的hibernate-mapping-3.0.dtd找到該聲明
①hibernate-mapping
屬性名 | 是否必須 | 說明 |
package | 否 | 爲映射文件的類指定一個包名。用於非全限定類名 |
schema | 否 | 指定數據庫的schema名 |
catalog | 否 | 爲數據庫指定catalog名 |
default-cascade | 否 | 指定默認的級聯樣式,默認爲空 |
default-access |
否 | 指定 Hibernate 的默認的屬性訪問策略。 |
default-lazy | 否 | 指定Hibernate默認採用的延遲加載策略,默認爲true |
② class(name、table)
屬性名 | 是否必須 | 說明 |
name |
否 | 指定該持久化類映射的持久化類的類名 |
table | 否 | 指定該持久化類映射的表名,Hibernate 默認以持久化類的類名作爲表名 |
mutable | 否 | 指出持久化類的實例是否可變 |
catalog | 否 | 爲數據庫指定catalog名,這裏設置會覆蓋hibernate-mapping的設置 |
lazy | 否 | 指定是否使用延遲加載 |
rowid | 否 | 指定是否可以使用ROWID |
③id主鍵(name、clumn、generator)
屬性名 | 是否必須 | 說明 |
name |
否 | 標識持久化類 OID 的屬性名 |
column | 否 | 設置標識屬性所映射的數據表的列名(主鍵字段的名字) |
type | 否 |
指定 Hibernate 映射類型。Hibernate 映射類型是 Java 類型與 SQL 類型的橋樑。如果沒有爲某個屬性顯式設定映射類型,Hibernate 會運用反射機制先識別出持久化類的特定屬性的 Java 類型,然後自動使用與之對應的默認的 Hibernate 映射類型 |
unsaved-value | 否 | 若設定了該屬性,Hibernate 會通過比較持久化類的 OID 值和該屬性值來區分當前持久化類的對象是否爲臨時對象 |
③.①主鍵生成策略
- assigned [轉讓主鍵生成權]
主鍵由外部程序負責生成,無需Hibernate參與。
-
hilo
通過hi/lo 算法實現的主鍵生成機制,需要額外的數據庫表保存主鍵生成歷史狀態。 -
seqhilo
與hilo 類似,通過hi/lo 算法實現的主鍵生成機制,只是主鍵歷史狀態保存在Sequence中,適用於支持Sequence的數據庫,如Oracle。 -
increment
主鍵按數值順序遞增。此方式的實現機制爲在當前應用實例中維持一個變量,以保存着當前的最大值,之後每次需要生成主鍵的時候
將此值加1作爲主鍵。
這種方式可能產生的問題是:如果當前有多個實例訪問同一個數據庫,那麼由於各個實例各自維護主鍵狀態,不同實例可能生成同樣的主鍵,從而造成主鍵重複異常。因此,如果同一數據庫有多個實例訪問,此方式必須避免使用。 -
identity
採用數據庫提供的主鍵生成機制。如DB2、SQL Server、MySQL中的主鍵生成機制。 -
sequence
採用數據庫提供的sequence 機制生成主鍵。如Oralce 中的Sequence。 -
native
由Hibernate根據底層數據庫自行判斷採用identity、hilo、sequence其中一種作爲主鍵生成方式。 -
uuid.hex
由Hibernate基於128 位唯一值產生算法生成16 進制數值(編碼後以長度32 的字符串表示)作爲主鍵。 -
uuid.string
與uuid.hex 類似,只是生成的主鍵未進行編碼(長度16)。在某些數據庫中可能出現問題(如PostgreSQL)。 -
foreign
使用外部表的字段作爲主鍵。一般而言,利用uuid.hex方式生成主鍵將提供最好的性能和數據庫平臺適應性。
作者:短髮即正義
鏈接:https://www.jianshu.com/p/085811f9b15a
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
④property(name、column、type、length)
屬性類似於id,但是不同的是id作爲主鍵