Hibernate的generator屬性之意義(轉(zhuǎn)載)

轉(zhuǎn)載自:Hibernate的generator屬性之意義
不論是否被發(fā)現(xiàn),一切榮譽(yù)歸屬于大佬。

本文講述Hibernate的generator屬性的意義。Generator屬性有7種class,本文簡(jiǎn)略描述了這7種class的意義和用法。
Hibernate的Generator屬性有7種class,本文簡(jiǎn)略描述了這7種class的意義和用法。

1、identity:用于MySql數(shù)據(jù)庫。特點(diǎn):遞增

< id name="id" column="id">   
    < generator class="identity"/>   
< /id> 

注:對(duì)于MySql數(shù)據(jù)庫使用遞增序列時(shí)需要在建表時(shí)對(duì)主鍵指定為auto_increment屬性。

2、sequence:用于Oracle數(shù)據(jù)庫

< id name="id" column="id">   
   < generator class="sequence">   
     < param name="sequence">序列名< /param>   
   < /generator>   
< /id> 

3、native:跨數(shù)據(jù)庫時(shí)使用,由底層方言產(chǎn)生。
Default.sequence為hibernate_sequence

< id name="id" column="id">   
   < generator class="native"/>   
< /id>   

注:使用native時(shí)Hibernate默認(rèn)會(huì)去查找Oracle中的hibernate_sequence序列。
如果Oracle中沒有該序列,連Oracle數(shù)據(jù)庫時(shí)會(huì)報(bào)錯(cuò)。

4、hilo:通過高低位合成id,先建表hi_value,再建列next_value。必須要有初始值。

< id name="id" column="id">   
    < generator class="hilo">   
      < param name="table">high_val< /param>   
       < param name="column">nextval< /param>   
      < param name="max_lo">5< /param>   
    < /generator>   
< /id>  

5、sequencehilo:同過高低位合成id,建一個(gè)sequence序列,不用建表。

< id name="id" column="id">   
< generator class="hilo">   
< param name="sequence">high_val_seq< /param>   
< param name="max_lo">5< /param>   
< /generator>   
< /id> 

6、assigned:用戶自定義id;

< id name="id" column="id">   
< generator class="assigned"/>   
< /id> 

7、foreign:用于一對(duì)一關(guān)系共享主健時(shí),兩id值一樣。

本文講解Hibernate中hbm的generator子元素的一些內(nèi)置生成器的快捷名字。Generator子元素是一個(gè)非常簡(jiǎn)單的接口;某些應(yīng)用程序可以選擇提供他們自己特定的實(shí)現(xiàn)。
在*.hbm.xml必須聲明的< generator>子元素是一個(gè)Java類的名字,用來為該持久化類的實(shí)例生成唯一的標(biāo)識(shí)。

<  generator class="sequence"/>

這是一個(gè)非常簡(jiǎn)單的接口;某些應(yīng)用程序可以選擇提供他們自己特定的實(shí)現(xiàn)。當(dāng)然,Hibernate提供了很多內(nèi)置的實(shí)現(xiàn)。下面是Generator子元素的一些內(nèi)置生成器的快捷名字:

increment(遞增)

用于為long, short或者int類型生成唯一標(biāo)識(shí)。只有在沒有其他進(jìn)程往同一張表中插入數(shù)據(jù)時(shí)才能使用。 在集群下不要使用。

identity

對(duì)DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的內(nèi)置標(biāo)識(shí)字段提供支持。返回的標(biāo)識(shí)符是long, short 或者int類型的。

sequence (序列)

在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的標(biāo)識(shí)符是long, short或者 int類型的。

hilo (高低位)

使用一個(gè)高/低位算法來高效的生成long, short或者 int類型的標(biāo)識(shí)符。給定一個(gè)表和字段(默認(rèn)分別是是hibernate_unique_key 和next_hi)作為高位值得來源。高/低位算法生成的標(biāo)識(shí)符只在一個(gè)特定的數(shù)據(jù)庫中是唯一的。在使用JTA獲得的連接或者用戶自行提供的連接中,不要使用這種生成器。

seqhilo(使用序列的高低位)

使用一個(gè)高/低位算法來高效的生成long, short或者 int類型的標(biāo)識(shí)符,給定一個(gè)數(shù)據(jù)庫序列(sequence)的名字。

uuid.hex

用一個(gè)128-bit的UUID算法生成字符串類型的標(biāo)識(shí)符。在一個(gè)網(wǎng)絡(luò)中唯一(使用了IP地址)。UUID被編碼為一個(gè)32位16進(jìn)制數(shù)字的字符串。

uuid.string

使用同樣的UUID算法。UUID被編碼為一個(gè)16個(gè)字符長(zhǎng)的任意ASCII字符組成的字符串。不能使用在PostgreSQL數(shù)據(jù)庫中

native(本地)

根據(jù)底層數(shù)據(jù)庫的能力選擇identity, sequence 或者h(yuǎn)ilo中的一個(gè)。

assigned(程序設(shè)置)

讓應(yīng)用程序在save()之前為對(duì)象分配一個(gè)標(biāo)示符。

foreign(外部引用)

使用另外一個(gè)相關(guān)聯(lián)的對(duì)象的標(biāo)識(shí)符。和< one-to-one>聯(lián)合一起使用。

Generator子元素的用法:

<  class name="onlyfun.caterpillar.User" table="USER"> 
           <  id name="id" type="string" unsaved-value="null"> 
               <  column name="USER_ID"/> 
               <  generator class="uuid.hex"/> 
           <  /id>  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • class 可配置項(xiàng) native:根據(jù)使用的數(shù)據(jù)庫幫你選擇哪個(gè)值 uuid:類似C#Guid 1、assigne...
    垃圾簡(jiǎn)書_吃棗藥丸閱讀 564評(píng)論 0 2
  • Hibernate中配置主要分為兩種:一種包含了Hibernate與數(shù)據(jù)庫的基本連接信息,在Hibernate工作...
    FTOLsXD閱讀 2,215評(píng)論 0 10
  • 不知道從什么時(shí)候起變成了雷雨天就難以入睡的生理構(gòu)造,原來安心理得的在哪里。雷聲一響,眼睛就不自覺張開了然后陷入無邊...
    九千萬ding閱讀 374評(píng)論 0 3
  • 等待著 汗水凝結(jié)的鮮花盛開 等待著 淚水劃過臉龐綻放微笑 勿忘初心 攜手同行在夢(mèng)的舞臺(tái) 用柔弱的身體 化聚堅(jiān)強(qiáng)的信...
    MsDiva閱讀 222評(píng)論 0 5
  • 如何控制情緒化: 一、黃色性格是四種性格最不容易情緒化,除非情緒化有助于達(dá)成目標(biāo)。 二、綠色也不會(huì)情緒化,你罵ta...
    承思而行閱讀 172評(píng)論 0 0

友情鏈接更多精彩內(nèi)容