日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate主键生成策略总结(这里面讲的很详细)

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate主键生成策略总结(这里面讲的很详细) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?Hibernate提供的主鍵生成策略,使我們可以在實體類的映射xml文件中設定關鍵字來告訴hibernate我們要使用的主鍵生成方式,然后hibernate會根據設定完成數據庫的主鍵控制。

一、首先通過舉例子來了解實體映射文件(*.hbm.xml)中對id生成策略配置格式

??? 用戶User的實體類User.java

????

[java] view plaincopyprint?
  • package com.bjpowernode.hibernate;?
  • ?
  • import java.util.Date;?
  • ?
  • public class User {?
  • ?
  • ?????? private String id;?????????
  • ?????? private String name;??
  • ?????? public User(){}?
  • ?????? public String getId() {?
  • ?????????? return id;?
  • ?????? }?
  • ?????? public void setId(String id) {?
  • ?????????? this.id = id;?
  • ?????? }?
  • ?????? public String getName() {?
  • ?????????? return name;?
  • ?????? }?
  • ?????? public void setName(String name) {?
  • ?????????? this.name = name;?
  • ?????? }?
  • ?
  • }?
  • package com.bjpowernode.hibernate;import java.util.Date;public class User {private String id; private String name; public User(){}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}


    User.java對應的映射文件User.hbm.xml

    [html] view plaincopyprint?
  • <?xmlversion="1.0"?>?
  • <!DOCTYPE hibernate-mapping PUBLIC??
  • ? "-//Hibernate/Hibernate Mapping DTD 3.0//EN"?
  • ?? "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">?
  • <hibernate-mapping>?
  • ?? <class name="com.bjpowernode.hibernate.User">?
  • ??????????? <idname="id">?
  • ?
  • ???????????????????? <generatorclass="uuid"/>?
  • ?
  • ??????????? </id>?
  • ??????????? <propertyname="name"/>?
  • ??????????? <propertyname="password"/>????????????????????
  • ?? </class>?
  • ?
  • </hibernate-mapping>?
  • <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping><class name="com.bjpowernode.hibernate.User"><id name="id"><generator class="uuid"/></id><property name="name"/><property name="password"/> </class></hibernate-mapping>


    ?? 其中

    ?? <id name="id" column="表主鍵字段名" type="java.lang.Integer">

    ??????? <generator class="設置主鍵生成策略類型"/>

    ?? </id>

    ??? 二、Hibernate常用的主鍵生成策略的原理、特點、應用場合

    ??? 關于映射文件的問題下次再介紹,這次主要總結hibernate常用主鍵生成策略。

    ?? (1)increment

    ?????? a)對主鍵值采取自動順序增長的方式生成新的主鍵,值默認從1開始。

    ?????? b)原理:在當前應用實例中維持一個變量,以保存當前最大值,之后每次需要生成主鍵值的時候將此值加1作為主鍵.不依賴于底層的數據庫,因此所有的數據庫都可以使用

    ?????? c)缺點:通過increment的生成主鍵的原理可推斷,此種主鍵生成策略不適用于集群、同一時段大量用戶并發訪問的系統,既當大量用戶同一時間段同時進行插入操作的時候,可能存在取得相同的最大值然后再同時+1的情況,這個時候就會造成主鍵沖突。因此,如果同一數據庫有多個實例訪問,此方式必須避免使用。

    ?? (2)UUID

    ?????? a)原理UUID使用128位UUID算法生成主鍵,能夠保證網絡環境下的主鍵唯一性,也就能夠保證在不同數據庫及不同服務器下主鍵的唯一性。所以使用于所有數據庫。

    ?????? b)特點;能夠保證數據庫中的主鍵唯一性,但是在生成的主鍵占用比較多的存貯空間

    ?? (3)Hilo

     ???? a)原理:通過hi/lo 算法(Hilo使用高低位算法生成主鍵,高低位算法使用一個高位值和一個低位值,然后把算法得到的兩個值拼接起來)實現的主鍵生成機制,需要額外的數據庫表保存主鍵生成歷史狀態。

    ?????? b)特點:需要額外的數據庫表和字段提供高位值來源。默認情況下使用的表是   hibernate_unique_key,默認字段叫作next_hi。next_hi必須有一條記錄否則會出現錯誤。需要額外的數據庫表的支持,能保證同一個數據庫中主鍵的唯一性,但不能保證多個數據庫之間主鍵的唯一性。Hilo主鍵生成方式由Hibernate 維護,所以Hilo方式與底層數據庫無關。

    ?? (4)sequence

    ?????? a)sequence實際是就是一張單行單列的表。

    ?????? b)實現原理:調用數據庫中底層存在的sequence生成主鍵,需要底層數據庫的支持序列,因此他是依賴于數據庫的。

    ?????? c)支持sequence的數據庫有:Oracle 、DB2(Mysql/SQlServer不支持)、PostgreSql、SAPDb等

    ?? (5)identity

    ?????? a)根據底層數據庫,來支持自動增長,不同的數據庫用不同的主鍵增長方式。

    ?????? b)特點: 與底層數據庫有關,要求數據庫支持Identity,如MySQl中是auto_increment, SQL Server 中是Identity。支持的數據庫有MySql、SQL Server、DB2、Sybase和HypersonicSQL。

    ?????? c)好處:在建表的時候指定了id為自動增長,實際開發中就不需要自己定義插入數據庫的主鍵值,系統會自動順序遞增一個值 。Identity無需Hibernate和用戶的干涉,使用較為方便,但由于依賴于數據庫,所以不便于在不同的數據庫之間移植程序。

      

    ?? (6)native

    ?????? a)作用:根據數據庫的類型,自動在sequence 、identity和,hilo進行切換。

    ?????? b)實現自動切換的依據:根據Hibernate配置文件中的方言來判斷是Oracle還是Mysql、SqlServer,然后針對數據庫的類型抉擇 sequence還是identity作為主鍵生成策略。

    ?????? c)用處:由于Hibernate會根據底層數據庫采用不同的映射方式,因此靈活性高,便于程序移植,項目中如果用到多個數據庫時,可以使用這種方式。

    ?? (7)assigned

    ?????? a)作用:用于手工分配主鍵生成器,一旦指定為這個了,Hibernate就不在自動為程序做主鍵生成器了。沒有指定<generator>標簽時,默認就是assigned主鍵的生成方式

    ?????? b)使用方法:在程序中session.save();之前,由程序員自己指定主鍵值為多少。

    ???????? 例如:user.setId(1);這就是在程序中程序員手動為用戶表指定主鍵值為1。

    ?? (8)foreign

    ?????? 只適用基于共享主鍵的一對一關聯映射的時候使用。即一個對象的主鍵是參照的另一張表的主鍵生成的。

    ? 對數據庫的依賴性總結

    ?? UUID,increment、Hilo、assigned:對數據庫無依賴

    ??? identity:依賴Mysql或sql server,主鍵值不由hibernate維護

    ??? sequence:適合于oracle等支持序列的dbms,主鍵值不由hibernate維護,由序列產生。

    ??? native:根據底層數據庫的具體特性選擇適合的主鍵生成策略,如果是mysql或sqlserver,選擇identity,如果是oracle,選擇sequence。

    ?? 關于主鍵生成策略的選擇:

    ?? 一般來說推薦UUID,因為生成主鍵唯一,且對數據庫無依賴,可移植性強。

    ??? 由于常用的數據庫,如Oracle、DB2、SQLServer、MySql 等,都提供了易用的主鍵生成機制(Auto-Increase 字段或者Sequence)。我們可以在數據庫提供的主鍵生成機制上,采用native,sequence或者identity的主鍵生成方式。

    ??? 不過值得注意的是,一些數據庫提供的主鍵生成機制在效率上未必最佳大量并發insert數據時可能會引起表之間的互鎖。

    ??? 因此,對于并發Insert要求較高的系統,推薦采用uuid作為主鍵生成機制。

    ??? 總之,hibernate主鍵生成器選擇,還要具體情況具體分析。一般而言,利用uuid方式生成主鍵將提供最好的性能和數據庫平臺適應性。

    總結

    以上是生活随笔為你收集整理的Hibernate主键生成策略总结(这里面讲的很详细)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 人妻互换一区二区三区四区五区 | 在线免费观看网站入口在哪 | 欧美性猛交久久久久 | 黄色复仇草 | 国产伦精品一区二区三区视频网站 | 国产美女www爽爽爽 www.国产毛片 | 高清免费视频日本 | 黄色av免费观看 | 国产jk精品白丝av在线观看 | 男女午夜免费视频 | 五月开心激情 | 精品国产免费人成在线观看 | 日日操夜夜骑 | 亚洲午夜精品久久 | 疯狂做爰的爽文多肉小说王爷 | 精品一区二区在线视频 | 欧美瑟瑟 | 毛片内射久久久一区 | 在线免费看av片 | 五月婷婷六月香 | 玩弄人妻少妇500系列视频 | 高h喷水荡肉少妇爽多p视频 | 老女人乱淫 | 久久久ww| 国产精品久久久久久妇女6080 | 美女福利视频网 | 啪啪av网站| 亚洲熟妇丰满大屁股熟妇 | 亚洲精品一二三四 | 亚洲欧美日韩综合在线 | 91沈先生在线 | 国产裸体舞一区二区三区 | 成人一级黄色片 | 好吊妞在线观看 | 国产v亚洲v天堂无码 | 一级黄色片片 | 大尺度叫床戏做爰视频 | 国产成人毛片 | 一本色道久久综合亚洲精品图片 | 91影视在线观看 | 99热8| 视频精品久久 | 红桃视频成人在线 | 亚洲片国产一区一级在线观看 | 久久成人福利 | 神马久久久久久久 | 四川一级毛毛片 | 国产三级全黄裸体 | 国产免费一区二区三区在线播放 | xxxx.国产| 二区视频在线观看 | 99热这里都是精品 | 色眯眯视频 | 特级精品毛片免费观看 | 亚洲天堂日韩av | 国产视频一区二区三区在线 | 亚洲无套 | 成人午夜激情视频 | 麻豆一区二区三区在线观看 | 高清乱码毛片 | 一区二区三区免费在线观看 | 免费成人在线观看视频 | 色婷婷精品国产一区二区三区 | 91黑人精品一区二区三区 | 嫩草嫩草嫩草嫩草嫩草 | 日本久久综合 | 麻豆国产在线播放 | 欧日韩不卡视频 | 亚日韩 | 四虎影院在线 | 亚洲人网站| 在线观看涩涩 | 亚洲国产中文字幕 | 深夜在线| 久久99精品久久久久久园产越南 | 欧美激情综合网 | 久久久精品中文字幕 | 天天做日日做 | 美女洗澡隐私免费网站 | 男男成人高潮片免费网站 | 蜜桃av噜噜一区二区三区 | 久久视| 国产精品二区视频 | 国产精品自拍在线 | 超碰77 | www.五月激情 | 亚洲第5页| 欧美黑吊大战白妞欧美大片 | 天堂av2014| 亚洲偷偷 | 先锋影音一区二区 | 亚洲天堂手机在线 | 自拍偷拍激情视频 | 久久精品福利 | 国产精品99久久久精品无码 | 99免费看| 亚洲伊人精品 | 男女视频久久 | 午夜免费福利影院 |