3-Hibernate mapping file

 1.classname.hbm.xml
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC 
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping 
  6.     package="com.unicorn.hibernate.domain">
  7.     <class name="Unicorn">
  8.         <id name="id">
  9.             <generator class="assigned"/>
  10.         </id>
  11.         <!-- unique確保name唯一 -->
  12.         <property name="name" unique="true"/>
  13.         <property name="birthday"/>
  14.     </class>
  15. </hibernate-mapping>
rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C02%5Cclip_filelist.xml">

這里的hibernate映射文件就是 用于說明Java對象與哪個表中的記錄相對應.以及Java對象的各個屬性分別對應表中的哪一列,不同性質的屬性(例如:主鍵和普通屬性)用不同的標簽來映射,如果Java對象中的某個屬性不需要保存在數據庫中,那么在Hibernate映射文件中就不需要配置這個屬性.


rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C03%5Cclip_filelist.xml">

主鍵生成方式:<generator class=”native”></generator>

Class屬性有以下幾種類型:

I .Assigned

       主鍵由應用邏輯產生,數據交由Hibernate保存時,主鍵值已經設置完畢,無需Hibernate干預.

II .hilo

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

III .seqhilo

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

IV .increment

       主鍵按數值順序遞增.

       此實現機制為在當前應用實例中維持一個變量以保存當前的最大值,之后每次需要生成主鍵的時候將此值加1作為主鍵.

       由于各個實例各自維護主鍵狀態,不同實例可能生成同樣的主鍵,因此,如果同一個數據庫有多個實例訪問,此方式必須避免使用.

V .identity

       采用數據庫提供的主鍵生成機制,SQL Server,MySQL中的自增主鍵生成機制.

VI .sequence

       采用數據庫提供的sequence機制生成逐漸.Oracle Sequence

VII .native

       Hibernate根據數據庫適配器中的定義,自動采用identity,hilo,sequence的其中一種作為主鍵生成方式.

VIII .uuid.hex

       Hibernate基于128位惟一值產生算法,根據當前設備IP,時間,JVM啟動時間,內部自增量等4個參數生成十六進制數值(編碼后以長度為32位的字符串表示)主鍵.

       一般而言,利用uuid.hex方式生成主鍵將提供最好的數據插入性能和數據庫平臺適應性.

IX .uuid.string

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

X .foreign

       使用外部表的字段作為主鍵,此類主鍵生成機制我們將在數據關聯部分再講解.

XI .select

       Hibernate 3 中新引入的主鍵獲取機制,主要針對遺留系統的改造工程.

Hibernate3同時還提供了另一種與實體類型無關的映射方式:動態模型(Dynamic Model),即通過通用數據容器(Map)對庫表記錄進行表達.

       對于以上實例,動態模型方式的映射文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
  4. <hibernate-mapping>
  5.     <class entity-name="DynamicUnicornMap " table="Unicorn">
  6.         <id name="id" column="id" type="java.lang.Integer">
  7.             <generator class="assigned"></generator>
  8.         </id>
  9.         <property name="name" column="name" type="java.lang.String"></property>
  10.         <property name="age" column="age" type="java.lang.Integer"></property>
  11.     </class>
  12. </hibernate-mapping>
rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C05%5Cclip_filelist.xml">

此類對應的操作代碼示例如下:(以數據保存為例)

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C06%5Cclip_filelist.xml">

  1. session =sessionFactory.openSession().getSession(EntityMode.MAP);
  2. Map unicornMap = new HashMap();
  3. unicornMap .put(“name”,”unicorn”);
  4. unicornMap .put(“age”,new Integer(25));
  5. Transaction tx=session.beginTransaction();
  6. session.save(“DynamicUnicornMap”,unicornMap );
  7. tx.commit();
rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C08%5Cclip_filelist.xml">

其中, session.save(“DynamicUnicornMap”,unicornMap);中的”DynamicUnicornMap”即配置中定義的實體名.Hibernate將根據實體名所對應的映射配置,完成動態模型的持久化操作.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值