久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Hibernate中關(guān)于ID配置

 pengx 2008-08-26
id標(biāo)簽 
     被映射的類必須聲明對應(yīng)數(shù)據(jù)庫表主鍵字段。大多數(shù)類有一個JavaBeans風(fēng)格的屬性,,為每一個實(shí)例包含唯一的標(biāo)識。<id> 元素定義了該屬性到數(shù)據(jù)庫表主鍵字段的映射,。

<id
       name="propertyName"                      
       type="typename"                          
       column="column_name"                     
       unsaved-value="any|none|null|id_value"   
       access="field|property|ClassName">       
       <generator class="generatorClass"/>
</id>
name (可選): 標(biāo)識屬性的名字。

type (可選): 標(biāo)識Hibernate類型的名字,。

column (可選 - 默認(rèn)為屬性名): 主鍵字段的名字,。

unsaved-value (可選 - 默認(rèn)為null): 一個特定的標(biāo)識屬性值,用來標(biāo)志該實(shí)例是剛剛創(chuàng)建的,,尚未保存,。這可以把這種實(shí)例和從以前的session中裝載過(可能又做過修改--譯者注)但未再次持久化的實(shí)例區(qū)分開來。

access (可選 - 默認(rèn)為property): Hibernate用來訪問屬性值的策略,。

如果 name屬性不存在,,會認(rèn)為這個類沒有標(biāo)識屬性。

unsaved-value 屬性很重要,!如果你的類的標(biāo)識屬性不是默認(rèn)為null的,,你應(yīng)該指定正確的默認(rèn)值。

還有一個另外的<composite-id>聲明可以訪問舊式的多主鍵數(shù)據(jù),。我們強(qiáng)烈不鼓勵使用這種方式,。

1. generator
必須聲明的<generator>子元素是一個Java類的名字,用來為該持久化類的實(shí)例生成唯一的標(biāo)識,。如果這個生成器實(shí)例需要某些配置值或者初始化參數(shù),,用<param>元素來傳遞,。

<id name="id" type="long" column="uid" unsaved-value="0">
       <generator class="net.sf.hibernate.id.TableHiLoGenerator">
               <param name="table">uid_table</param>
               <param name="column">next_hi_value_column</param>
       </generator>
</id>
所有的生成器都實(shí)現(xiàn)net.sf.hibernate.id.IdentifierGenerator接口,。這是一個非常簡單的接口;某些應(yīng)用程序可以選擇提供他們自己特定的實(shí)現(xiàn),。當(dāng)然,,Hibernate提供了很多內(nèi)置的實(shí)現(xiàn),。下面是一些內(nèi)置生成器的快捷名字:

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

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

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

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

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

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

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

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

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

foreign(外部引用)
使用另外一個相關(guān)聯(lián)的對象的標(biāo)識符,。和<one-to-one>聯(lián)合一起使用,。


2. 高/低位算法(Hi/Lo Algorithm)
hilo 和 seqhilo生成器給出了兩種hi/lo算法的實(shí)現(xiàn),這是一種很令人滿意的標(biāo)識符生成算法,。第一種實(shí)現(xiàn)需要一個“特殊”的數(shù)據(jù)庫表來保存下一個可用的“hi”值,。第二種實(shí)現(xiàn)使用一個Oracle風(fēng)格的序列(在被支持的情況下)。

<id name="id" type="long" column="cat_id">
       <generator class="hilo">
               <param name="table">hi_value</param>
               <param name="column">next_value</param>
               <param name="max_lo">100</param>
       </generator>
</id>
<id name="id" type="long" column="cat_id">
       <generator class="seqhilo">
               <param name="sequence">hi_value</param>
               <param name="max_lo">100</param>
       </generator>
</id>
很不幸,,你在為Hibernate自行提供Connection,,或者Hibernate使用JTA獲取應(yīng)用服務(wù)器的數(shù)據(jù)源連接的時候無法使用hilo 。Hibernate必須能夠在一個新的事務(wù)中得到一個"hi"值,。在EJB環(huán)境中實(shí)現(xiàn)hi/lo算法的標(biāo)準(zhǔn)方法是使用一個無狀態(tài)的session bean,。

3. UUID算法(UUID Algorithm )
UUID包含:IP地址,JVM的啟動時間(精確到1/4秒),,系統(tǒng)時間和一個計(jì)數(shù)器值(在JVM中唯一),。在Java代碼中不可能獲得MAC地址或者內(nèi)存地址,所以這已經(jīng)是我們在不使用JNI的前提下的能做的最好實(shí)現(xiàn)了。

不要試圖在PostgreSQL中使用uuid.string,。

4. 標(biāo)識字段和序列(Identity Columns and Sequences)
對于內(nèi)部支持標(biāo)識字段的數(shù)據(jù)庫(DB2,MySQL,Sybase,MS SQL),,你可以使用identity關(guān)鍵字生成。對于內(nèi)部支持序列的數(shù)據(jù)庫(DB2,Oracle, PostgreSQL, Interbase, McKoi,SAP DB),你可以使用sequence風(fēng)格的關(guān)鍵字生成,。這兩種方式對于插入一個新的對象都需要兩次SQL查詢,。

<id name="id" type="long" column="uid">
       <generator class="sequence">
               <param name="sequence">uid_sequence</param>
       </generator>
</id>
<id name="id" type="long" column="uid" unsaved-value="0">
       <generator class="identity"/>
</id>
     對于跨平臺開發(fā),native策略會從identity, sequence 和hilo中進(jìn)行選擇,,取決于底層數(shù)據(jù)庫的支持能力,。

下面再給個簡單例子:

<id name="id" type="long" column="uid">
   <generator class="sequence">
       <param name="sequence">uid_sequence</param>
   </genarator>
</id>

注意:

<generator class=""> 里面可以選啊!推薦Oracle用sequence,seqhilo

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多