隨筆-126  評論-247  文章-5  trackbacks-0


          Hibernate
          默認總共支持 13 種生成策略 :

          1. increment        2.  identity        3. sequence

          4. hilo                  5. seqhilo         6. uuid

          7. uuid.hex          8. guid             9. native

          10. assigned       11. select         12. foreign        13. sequence-identity

           

          下面介紹幾個較為常用的策略 :

          ① identity [ 自然遞增 ]

                   支持 DB2,MySQL,SQL Server,Sybase 和HypersonicSQL 數據庫, 用于為 long 或 short 或 int 類型生成唯一標識。它依賴于底層不同的數據庫,
                 與 Hibernate 和 程序員無關。

          注解示例 :

          @Id

          @GenericGenerator(name = "idGenerator", strategy = "identity")

          @GeneratedValue(generator = "idGenerator")

           

          ② sequence [ 序列 ]

          支持 Oracle,DB2,PostgreSql,SAPDb 等數據庫,用于為 long 或 short 或 int 類型生成唯一標識。它需要底層數據庫的支持,
                 并由數據庫來維護這個 sequence 序列。

          注解示例 :

          @Id

             @GenericGenerator(name = "idGenerator", strategy = "sequence",

          parameters = {@Parameter(name = "sequence",value="seq_name")})

             @GeneratedValue(generator = "idGenerator")

          注意 : 該策略要求設定序列名,否則 hibernate 將無法找到,這將引致拋出異常 :

          org.hibernate.exception.SQLGrammarException: could not get next sequence value

           

          ③ native

                   需底層數據庫的支持,對于 MySQL,SQL Server 采用 identity 的生成策略,對于 Oracle,則采用 sequence 策略。

          注解示例 :

          @Id

             @GenericGenerator(name = "idGenerator", strategy = "native")

             @GeneratedValue(generator = "idGenerator")

           

          ④ increment [ 自然遞增 ]

                 與 identity 策略不同的是,該策略不依賴于底層數據庫,而依賴于 hibernate 本身,用于為 long 或 short 或 int 類型生成唯一標識。
                 主鍵計數器是由 hibernate 的一個實例來維護,每次自增量為 1,但在集群下不能使用該策略,
                 否則將引起主鍵沖突的情況,該策略適用于所有關系型數據庫使用。

          注解示例 :

                 @Id

             @GenericGenerator(name = "idGenerator", strategy = "increment")

             @GeneratedValue(generator = "idGenerator")

           

          ⑤ uuid [ 32位16進制數的字符串 ]

                   采用128位UUID算法生成主鍵,能夠保證網絡環境下的主鍵唯一性,也就能夠保證在不同數據庫及不同服務器下主鍵的唯一性。
                 uuid 最終被編碼成一個32位16進制數的字符串,
                 占用的存儲空間較大。用于為 String 類型生成唯一標識,適用于所有關系型數據庫。

          注解示例 :

                 @Id

             @GenericGenerator(name = "idGenerator", strategy = "uuid")

             @GeneratedValue(generator = "idGenerator")

           

          ⑤ assigned [ 手工分配主鍵ID值 ]

                 該策略要求程序員必須自己維護和管理主鍵,當有數據需要存儲時,程序員必須自己為該數據分配指定一個主鍵ID值,
                 如果該數據沒有被分配主鍵ID值或分配的值存在重復,則該數據都將無法被持久化且會引起異常的拋出。

          注解示例 :

                 @Id

             @GenericGenerator(name = "idGenerator", strategy = "assigned")

             @GeneratedValue(generator = "idGenerator")




            
          posted on 2012-10-12 20:10 fancydeepin 閱讀(12862) 評論(4)  編輯  收藏

          評論:
          # re: hibernate annotation 之 主鍵生成策略 2013-12-06 20:10 | rookie
          樓主的
          ③ native

          需底層數據庫的支持,對于 MySQL,SQL Server 采用 identity 的生成策略,對于 Oracle,則采用 sequence 策略。
          注解示例 :

          @Id

          @GenericGenerator(name = "idGenerator", strategy = "native")

          @GeneratedValue(generator = "idGenerator")
          請小心求證  回復  更多評論
            
          # re: hibernate annotation 之 主鍵生成策略[未登錄] 2016-04-16 23:43 | aa
          aa  回復  更多評論
            
          # re: hibernate annotation 之 主鍵生成策略[未登錄] 2016-04-16 23:43 | aa
          <script>alert('1')</script>  回復  更多評論
            
          # re: hibernate annotation 之 主鍵生成策略 2016-07-21 15:05 | 梵蒂岡
          二萬人  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 三门县| 平乐县| 望奎县| 布拖县| 光泽县| 德钦县| 砀山县| 沂水县| 从江县| 镇沅| 收藏| 佛学| 库尔勒市| 屏东县| 岚皋县| 萨嘎县| 石门县| 廊坊市| 华阴市| 库车县| 琼结县| 余江县| 伊宁县| 定远县| 江津市| 青海省| 光山县| 疏勒县| 瓦房店市| 泗水县| 中卫市| 双辽市| 崇州市| 嘉峪关市| 武邑县| 多伦县| 汶上县| 监利县| 郎溪县| 承德县| 昌吉市|