posts - 6, comments - 8, trackbacks - 0, articles - 6
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          1. Assigned
          ???? 主鍵由應(yīng)用邏輯產(chǎn)生,數(shù)據(jù)交由Hibernate保存時(shí),主鍵值已經(jīng)設(shè)置完畢,無(wú)需Hibernate干預(yù)。
          2.? hilo
          ??? 通過(guò)hi/lo算法實(shí)現(xiàn)的主鍵生成機(jī)制,需要額外的數(shù)據(jù)庫(kù)表保存主鍵生成歷史狀態(tài).
          3.? seqhilo
          ??? 與hilo類似,通過(guò)hi/lo算法實(shí)現(xiàn)的主鍵生成機(jī)制,只是主鍵歷史狀態(tài)保存在Sequence中,適用于支持Sequence的數(shù)據(jù)庫(kù),如Oracle。
          4.? increment
          ??? 主鍵按數(shù)值順序遞增。此方式的實(shí)現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實(shí)例中維持一個(gè)變量,以保存著當(dāng)前的最大值,之后每次需要生成主鍵的時(shí)候?qū)⒋酥导?作為主鍵。這種方式可能產(chǎn)生的問(wèn)題是:如果當(dāng)前有多個(gè)實(shí)例訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù),那么由于各個(gè)實(shí)例各自維護(hù)主鍵狀態(tài),不同實(shí)例可能生成同樣的主鍵,從而造成主鍵重復(fù)異常。因此,如果同一數(shù)據(jù)庫(kù)有多個(gè)實(shí)例訪問(wèn),此方式必須避免使用。
          5.? identity
          ??? 采用數(shù)據(jù)庫(kù)提供的主鍵生成機(jī)制,如SQL Server, MySQL中的自增主鍵生成機(jī)制。
          6.? sequence
          ??? 采用數(shù)據(jù)庫(kù)提供的sequence機(jī)制生成主鍵.如Oralce Sequence.
          7.? native
          ??? 由Hibernate根據(jù)數(shù)據(jù)庫(kù)適配器中的定義,自動(dòng)采用identity, hilo, sequence的其中一種作為主鍵生成方式。
          8.? uuid.hex
          ??? 由Hibernate基于,28位惟一值產(chǎn)生算法,根據(jù)當(dāng)前設(shè)備IP,時(shí)間,JVM啟動(dòng)時(shí)間,內(nèi)部自增量等4個(gè)參數(shù)生成十六進(jìn)制數(shù)值(編碼后以長(zhǎng)度為32位的字符串表示)作為主鍵。這種算法在最大程度上保證了產(chǎn)生ID的惟一性,即使是在多實(shí)例并發(fā)運(yùn)行的情況下。當(dāng)然,重復(fù)的概率在理論上依然存在,只是實(shí)在過(guò)于渺茫(可能數(shù)萬(wàn)年才出現(xiàn)一次)。一般而言,利用uuid.hex方式生成主鍵將提供最好的數(shù)據(jù)插入性能和數(shù)據(jù)庫(kù)平臺(tái)適應(yīng)性。
          9.? uuid.string·
          ??? 與uuid.hex類似,只是生成的主鍵未進(jìn)行編碼(長(zhǎng)度16位)。在某些數(shù)據(jù)庫(kù)中可能出現(xiàn)問(wèn)題(如PostgreSQL )。
          10. foreign
          ??? 使用外部表的字段作為主鍵,此類主鍵生成機(jī)制我們將在數(shù)據(jù)關(guān)聯(lián)部分結(jié)合實(shí)例進(jìn)行講解。
          11. select
          ??? Hibernate 3中新引入的主鍵獲取機(jī)制,主要針對(duì)遺留系統(tǒng)的改造工程。在一些早期系統(tǒng)中,主鍵可能依賴觸發(fā)器生成,即當(dāng)數(shù)據(jù)庫(kù)發(fā)生insert操作時(shí),通過(guò)觸發(fā)器捕獲這一操作,并為主鍵賦值。此時(shí),我們就必須在插入數(shù)據(jù)之后,再次通過(guò)某一識(shí)別字段讀取己插入的數(shù)據(jù),獲取其主鍵數(shù)據(jù)。
          <轉(zhuǎn)自:深入淺出hibernate>


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 石城县| 扶绥县| 蕉岭县| 清河县| 湖口县| 五家渠市| 达孜县| 高邮市| 瓮安县| 靖边县| 绍兴市| 巴塘县| 仁布县| 永平县| 资源县| 公安县| 西平县| 凤凰县| 齐齐哈尔市| 始兴县| 宜昌市| 左云县| 鄂伦春自治旗| 阿尔山市| 兴安盟| 天峻县| 文昌市| 灵寿县| 濮阳市| 白沙| 安多县| 孝义市| 安阳县| 太原市| 唐河县| 双桥区| 久治县| 刚察县| 阿鲁科尔沁旗| 清水县| 永和县|