Java Blog for Alex Wan

          Let life be beautiful like summer flowers and death like autumn leaves.

          統(tǒng)計(jì)

          留言簿(10)

          BlogJava

          Blogs

          DIV+CSS

          JQuery相關(guān)

          友情鏈接

          常去的地方

          數(shù)據(jù)供應(yīng)

          閱讀排行榜

          評論排行榜

          [hibernate]Hibernate主鍵生成方式 Key Generator

          Hibernate主鍵生成方式     Key   Generator  
            主鍵產(chǎn)生器  
            可選項(xiàng)說明:  
            1)   assigned  
            主鍵由外部程序負(fù)責(zé)生成,無需Hibernate參與。  
             
            2)   hilo  
            通過hi/lo   算法實(shí)現(xiàn)的主鍵生成機(jī)制,需要額外的數(shù)據(jù)庫表保存主  
            鍵生成歷史狀態(tài)。  
             
            3)   seqhilo  
            與hilo   類似,通過hi/lo   算法實(shí)現(xiàn)的主鍵生成機(jī)制,只是主鍵歷史  
            狀態(tài)保存在Sequence中,適用于支持Sequence的數(shù)據(jù)庫,如Oracle。  
             
            4)   increment  
            主鍵按數(shù)值順序遞增。此方式的實(shí)現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實(shí)例中維持  
            一個(gè)變量,以保存著當(dāng)前的最大值,之后每次需要生成主鍵的時(shí)候  
            將此值加1作為主鍵。  
            這種方式可能產(chǎn)生的問題是:如果當(dāng)前有多個(gè)實(shí)例訪問同一個(gè)數(shù)據(jù)  
            庫,那么由于各個(gè)實(shí)例各自維護(hù)主鍵狀態(tài),不同實(shí)例可能生成同樣  
            的主鍵,從而造成主鍵重復(fù)異常。因此,如果同一數(shù)據(jù)庫有多個(gè)實(shí)  
            例訪問,此方式必須避免使用。  
             
            5)   identity  
            采用數(shù)據(jù)庫提供的主鍵生成機(jī)制。如DB2、SQL   Server、MySQL  
            中的主鍵生成機(jī)制。  
             
            6)   sequence  
            采用數(shù)據(jù)庫提供的sequence   機(jī)制生成主鍵。如Oralce   中的  
            Sequence。  
             
            7)   native  
            由Hibernate根據(jù)底層數(shù)據(jù)庫自行判斷采用identity、hilo、sequence  
            其中一種作為主鍵生成方式。  
             
            8)   uuid.hex  
            由Hibernate基于128   位唯一值產(chǎn)生算法生成16   進(jìn)制數(shù)值(編碼后  
            以長度32   的字符串表示)作為主鍵。  
             
            9)   uuid.string  
            與uuid.hex   類似,只是生成的主鍵未進(jìn)行編碼(長度16)。在某些  
            數(shù)據(jù)庫中可能出現(xiàn)問題(如PostgreSQL)。  
             
            10)   foreign  
            使用外部表的字段作為主鍵。  
            一般而言,利用uuid.hex方式生成主鍵將提供最好的性能和數(shù)據(jù)庫平臺適  
            應(yīng)性。  
             
            另外由于常用的數(shù)據(jù)庫,如Oracle、DB2、SQLServer、MySql   等,都提  
            供了易用的主鍵生成機(jī)制(Auto-Increase   字段或者Sequence)。我們可以在數(shù)  
            據(jù)庫提供的主鍵生成機(jī)制上,采用generator-class=native的主鍵生成方式。  
            不過值得注意的是,一些數(shù)據(jù)庫提供的主鍵生成機(jī)制在效率上未必最佳,  
            大量并發(fā)insert數(shù)據(jù)時(shí)可能會引起表之間的互鎖。  
            數(shù)據(jù)庫提供的主鍵生成機(jī)制,往往是通過在一個(gè)內(nèi)部表中保存當(dāng)前主鍵狀  
            態(tài)(如對于自增型主鍵而言,此內(nèi)部表中就維護(hù)著當(dāng)前的最大值和遞增量),  
            之后每次插入數(shù)據(jù)會讀取這個(gè)最大值,然后加上遞增量作為新記錄的主鍵,之  
            后再把這個(gè)新的最大值更新回內(nèi)部表中,這樣,一次Insert操作可能導(dǎo)致數(shù)據(jù)  
            庫內(nèi)部多次表讀寫操作,同時(shí)伴隨的還有數(shù)據(jù)的加鎖解鎖操作,這對性能產(chǎn)生  
            了較大影響。  
            因此,對于并發(fā)Insert要求較高的系統(tǒng),推薦采用uuid.hex   作為主鍵生成  
            機(jī)制。    


          Let life be beautiful like summer flowers and death like autumn leaves.

          posted on 2008-09-02 11:24 Alexwan 閱讀(648) 評論(0)  編輯  收藏 所屬分類: J2EE數(shù)據(jù)庫

          主站蜘蛛池模板: 丹巴县| 南召县| 河曲县| 修水县| 富川| 闻喜县| 三门县| 拜泉县| 普安县| 张北县| 蛟河市| 开化县| 阜阳市| 成安县| 澳门| 绩溪县| 新宁县| 永康市| 陈巴尔虎旗| 许昌市| 池州市| 聂拉木县| 应城市| 邯郸县| 巴东县| 安平县| 永新县| 麻栗坡县| 贺州市| 阿坝| 五大连池市| 平南县| 皋兰县| 长阳| 昆山市| 常熟市| 通城县| 玉林市| 扶绥县| 汨罗市| 安阳市|