成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

剖析Hibernate主鍵生成幾種常用方式

開發 后端
這里介紹Hibernate主鍵生成幾種常用方式,由Hibernate根據不同的數據庫方言,自行判斷采用identity、hilo、sequence其中一種作為Hibernate主鍵生成方式。

Hibernate主鍵還是比較常用的,于是我研究了一下Hibernate主鍵生成,在這里拿出來和大家分享一下,希望對大家有用。

1.assigned:

主鍵由外部程序負責生成,無需Hibernate參與。----如果要由程序代碼來指定主鍵,就采有這種.

2.increment:

對 long , short 或 int 的數據列生成自動增長主鍵。increment主鍵生成方式的特點是與底層數據庫無關性,大部分數據庫如 Mysql,MSSQL 和ORACLE等都支持increament生成方式。此方式的實現機制為在當前應用實例中維持一個變量,以保存著當前的***值,之后每次需要生成主鍵的 時候將此值加1作為主鍵。increment方式的不足之處是當多個線程并發對數據庫表進行寫操作時,可能出現相同的主鍵值,發生主鍵重復的沖突,因此多線程并發操作時,不應該使用此方法。

3.identity:

如果數據列的類型是 long, short 或 int ,可使用主鍵生成器生成自動增長Hibernate主鍵。與底層數據庫有關,要求數據庫支持identify,如MySQL中是auto_increment,SQL Server中是Identify.支持的數據庫有MySQL,SQL Server,DB2,Sybase和HypersonicSQL.(好像不支持oracle) 無需Hibernate和用戶的干涉,使用較為方便,但不便于在不同的數據庫之間移植程序。identity的優點是不會發生 increment方式的并發錯做問題。數據庫涉及到的表要設置自動增長。

4.sequence:

在ORACLE等數據庫中使用sequence生成主鍵。sequence的特點是于數據庫的相關性,seqhio要求底層能支持sequence,列如Oracle。

5.hilo:

通過hi/lo 算法生成主鍵,需要一個表來保存額外的主鍵信息。這樣生成的標識符只在特定的數據庫是唯一的,在使用JTA(Java分布式事務) 獲得鏈接或用戶自定義提供的鏈接中,不要使用這種生成器。hilo方式需要維護表信息,因此對數據的影響的要率會造成一定影響。

6.seqhio:

與hilo 類似,通過hi/lo 算法實現的主鍵生成機制,只是主鍵歷史狀態保存在Sequence中,適用于支持Sequence的數據庫,如Oracle。如果數據列的類型是 long, short 或 int可使用該主鍵生成器。

7.native:

由Hibernate根據不同的數據庫方言,自行判斷采用identity、hilo、sequence其中一種作為Hibernate主鍵生成方式,native的 優點是與底層性無關,便于不同數據庫之間的移植,由Hibernate根據不同數據庫選擇主鍵的生成方式。在oracle中需要創建叫 Hibernate_sequence名字的sequence,如果設置了Hibernate.hbm2ddl.auto屬性,不需要手動建立序列,前提 是數據庫帳號必須有Create Sequence這種高級權限。mysql等數據庫則不用建立sequence。

8.uuid.hex:

采用基于128位的算法生成唯一值,并編制成32位長度的唯一字符串作為主鍵值,uuid.hex的優點是支持大部分數據庫,缺點就是要占用較大的存儲空間。對于并發Insert要求較高的系統,推薦采用uuid.hex 作為主鍵生成機制。

9.uuid.string:

使用UUID算法,UUID被編碼為一個16個字符長的任意ASCII字符組成的字符串。不能在PostgreSQL數據庫中使用。uuid.string同uuid.hex類似,需要占很大的存儲空間。

10.foreign:

使用外部表的字段作為Hibernate主鍵。

一般而言,利用uuid.hex方式生成Hibernate主鍵將提供***的性能和數據庫平臺適應性。
另外由于常用的數據庫,如Oracle、DB2、 SQLServer、MySql 等,都提供了易用的主鍵生成機制(Auto-Increase 字段或者Sequence)。我們可以在數據庫提供的主鍵生成機制上,采用generator-class=native的主鍵生成方式。不過值得注意的 是,一些數據庫提供的主鍵生成機制在效率上未必***,大量并發insert數據時可能會引起表之間的互鎖。數據庫提供的主鍵生成機制,往往是通過在一個內 部表中保存當前主鍵狀態(如對于自增型主鍵而言,此內部表中就維護著當前的***值和遞增量),之后每次插入數據會讀取這個***值,然后加上遞增量作為新記 錄的主鍵,之后再把這個新的***值更新回內部表中,這樣,一次Insert操作可能導致數據庫內部多次表讀寫操作,同時伴隨的還有數據的加鎖解鎖操作,這對性能產生了較大影響。因此,對于并發Insert要求較高的系統,推薦采用uuid.hex 作為主鍵生成機制。

【編輯推薦】

  1. 講解NHibernate Session
  2. 簡單描述Hibernate Sample
  3. Hibernate Annotations維護驗證邏輯
  4. Hibernate ClassValidator實例
  5. 描述Hibernate持久性類
責任編輯:佚名 來源: IT168
相關推薦

2009-09-25 13:33:43

Hibernate主鍵

2009-06-25 17:24:06

Hibernate主鍵

2009-09-22 09:31:15

Hibernate主鍵

2009-06-29 08:56:49

Hibernate主鍵生成主鍵

2009-06-29 08:50:20

Hibernate主鍵

2010-08-12 13:25:46

Flex驗證方式

2018-04-11 06:31:24

大數據架構數據分析Hadoop

2019-08-23 15:55:27

架構大數據BI系統

2009-09-27 13:42:05

Hibernate E

2009-09-24 10:50:31

Hibernate主鍵

2021-01-06 08:04:30

Linux方式提權

2009-09-23 14:23:51

Hibernate主鍵

2012-02-03 10:07:04

HibernateJava

2009-09-23 17:18:16

Hibernate S

2009-09-27 17:13:36

Hibernate V

2009-09-24 09:45:23

Hibernate批量

2009-09-27 10:19:11

Hibernate命名

2009-09-24 13:49:31

Hibernate自增

2009-09-22 15:22:08

Hibernate性能

2009-09-25 09:36:55

Hibernate核心
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区久久 | 北条麻妃视频在线观看 | 日韩av一区二区在线观看 | 亚洲欧美在线观看 | 欧美日韩一区二区在线播放 | 免费黄色网址视频 | 欧美精品一区在线发布 | 伊人二区 | 亚洲成人三级 | 久久免费精品 | 9久久| 亚洲国产高清在线 | av影音资源 | 成人精品国产免费网站 | 精品国产亚洲一区二区三区大结局 | 欧美日韩在线一区二区 | 亚洲成人av在线播放 | 久久夜色精品国产 | 亚洲狠狠爱 | 成人欧美一区二区 | 久久久久久国产精品免费免费 | 国产精品一区二区三区久久久 | 国产九九九 | 日韩电影在线一区 | 99re视频这里只有精品 | 亚洲精品三级 | 国产一区二区三区在线免费观看 | 亚洲色图综合网 | 国产精品视频500部 a久久 | 久草热播 | 国产9 9在线 | 中文 | 免费视频二区 | 国产精品99久久久久久久久 | 久久不卡日韩美女 | 狼色网| 欧美bondage紧缚视频 | 性高湖久久久久久久久3小时 | 六月色婷 | 盗摄精品av一区二区三区 | 欧美亚洲视频在线观看 | 精品国产18久久久久久二百 |