Hibernate核心配置*.hbm.xml詳解

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 值和該屬性值來區分當前持久化類的對象是否爲臨時對象

      ③.①主鍵生成策略 


  1. assigned [轉讓主鍵生成權]

      主鍵由外部程序負責生成,無需Hibernate參與。

  1. hilo
    通過hi/lo 算法實現的主鍵生成機制,需要額外的數據庫表保存主鍵生成歷史狀態。

  2. seqhilo
    與hilo 類似,通過hi/lo 算法實現的主鍵生成機制,只是主鍵歷史狀態保存在Sequence中,適用於支持Sequence的數據庫,如Oracle。

  3. increment
    主鍵按數值順序遞增。此方式的實現機制爲在當前應用實例中維持一個變量,以保存着當前的最大值,之後每次需要生成主鍵的時候
    將此值加1作爲主鍵。
    這種方式可能產生的問題是:如果當前有多個實例訪問同一個數據庫,那麼由於各個實例各自維護主鍵狀態,不同實例可能生成同樣的主鍵,從而造成主鍵重複異常。因此,如果同一數據庫有多個實例訪問,此方式必須避免使用。

  4. identity
    採用數據庫提供的主鍵生成機制。如DB2、SQL Server、MySQL中的主鍵生成機制。

  5. sequence
    採用數據庫提供的sequence 機制生成主鍵。如Oralce 中的Sequence。

  6. native
    由Hibernate根據底層數據庫自行判斷採用identity、hilo、sequence其中一種作爲主鍵生成方式。

  7. uuid.hex
    由Hibernate基於128 位唯一值產生算法生成16 進制數值(編碼後以長度32 的字符串表示)作爲主鍵。

  8. uuid.string
    與uuid.hex 類似,只是生成的主鍵未進行編碼(長度16)。在某些數據庫中可能出現問題(如PostgreSQL)。

  9. foreign
    使用外部表的字段作爲主鍵。一般而言,利用uuid.hex方式生成主鍵將提供最好的性能和數據庫平臺適應性。


作者:短髮即正義
鏈接:https://www.jianshu.com/p/085811f9b15a
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


 

   ④property(name、column、type、length)

   屬性類似於id,但是不同的是id作爲主鍵

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章