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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 延川县| 高州市| 峨眉山市| 藁城市| 罗甸县| 盘山县| 山丹县| 白城市| 荆门市| 冕宁县| 巧家县| 普宁市| 驻马店市| 海阳市| 顺平县| 浑源县| 吉隆县| 井冈山市| 栾川县| 博野县| 广宁县| 塘沽区| 西贡区| 利津县| 绥德县| 抚顺县| 鄂州市| 金川县| 行唐县| 绥滨县| 北碚区| 木里| 铜鼓县| 济南市| 莒南县| 双桥区| 洪湖市| 霍山县| 赤壁市| 日照市| 连州市|