偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

1.assigned:

主鍵由外部程序負(fù)責(zé)生成,無(wú)需Hibernate參與。----如果要由程序代碼來(lái)指定主鍵,就采有這種.

2.increment:

對(duì) long , short 或 int 的數(shù)據(jù)列生成自動(dòng)增長(zhǎng)主鍵。increment主鍵生成方式的特點(diǎn)是與底層數(shù)據(jù)庫(kù)無(wú)關(guān)性,大部分?jǐn)?shù)據(jù)庫(kù)如 Mysql,MSSQL 和ORACLE等都支持increament生成方式。此方式的實(shí)現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實(shí)例中維持一個(gè)變量,以保存著當(dāng)前的***值,之后每次需要生成主鍵的 時(shí)候?qū)⒋酥导?作為主鍵。increment方式的不足之處是當(dāng)多個(gè)線程并發(fā)對(duì)數(shù)據(jù)庫(kù)表進(jìn)行寫(xiě)操作時(shí),可能出現(xiàn)相同的主鍵值,發(fā)生主鍵重復(fù)的沖突,因此多線程并發(fā)操作時(shí),不應(yīng)該使用此方法。

3.identity:

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

4.sequence:

在ORACLE等數(shù)據(jù)庫(kù)中使用sequence生成主鍵。sequence的特點(diǎn)是于數(shù)據(jù)庫(kù)的相關(guān)性,seqhio要求底層能支持sequence,列如Oracle。

5.hilo:

通過(guò)hi/lo 算法生成主鍵,需要一個(gè)表來(lái)保存額外的主鍵信息。這樣生成的標(biāo)識(shí)符只在特定的數(shù)據(jù)庫(kù)是唯一的,在使用JTA(Java分布式事務(wù)) 獲得鏈接或用戶自定義提供的鏈接中,不要使用這種生成器。hilo方式需要維護(hù)表信息,因此對(duì)數(shù)據(jù)的影響的要率會(huì)造成一定影響。

6.seqhio:

與hilo 類似,通過(guò)hi/lo 算法實(shí)現(xiàn)的主鍵生成機(jī)制,只是主鍵歷史狀態(tài)保存在Sequence中,適用于支持Sequence的數(shù)據(jù)庫(kù),如Oracle。如果數(shù)據(jù)列的類型是 long, short 或 int可使用該主鍵生成器。

7.native:

由Hibernate根據(jù)不同的數(shù)據(jù)庫(kù)方言,自行判斷采用identity、hilo、sequence其中一種作為Hibernate主鍵生成方式,native的 優(yōu)點(diǎn)是與底層性無(wú)關(guān),便于不同數(shù)據(jù)庫(kù)之間的移植,由Hibernate根據(jù)不同數(shù)據(jù)庫(kù)選擇主鍵的生成方式。在oracle中需要?jiǎng)?chuàng)建叫 Hibernate_sequence名字的sequence,如果設(shè)置了Hibernate.hbm2ddl.auto屬性,不需要手動(dòng)建立序列,前提 是數(shù)據(jù)庫(kù)帳號(hào)必須有Create Sequence這種高級(jí)權(quán)限。mysql等數(shù)據(jù)庫(kù)則不用建立sequence。

8.uuid.hex:

采用基于128位的算法生成唯一值,并編制成32位長(zhǎng)度的唯一字符串作為主鍵值,uuid.hex的優(yōu)點(diǎn)是支持大部分?jǐn)?shù)據(jù)庫(kù),缺點(diǎn)就是要占用較大的存儲(chǔ)空間。對(duì)于并發(fā)Insert要求較高的系統(tǒng),推薦采用uuid.hex 作為主鍵生成機(jī)制。

9.uuid.string:

使用UUID算法,UUID被編碼為一個(gè)16個(gè)字符長(zhǎng)的任意ASCII字符組成的字符串。不能在PostgreSQL數(shù)據(jù)庫(kù)中使用。uuid.string同uuid.hex類似,需要占很大的存儲(chǔ)空間。

10.foreign:

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

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

【編輯推薦】

  1. 講解NHibernate Session
  2. 簡(jiǎn)單描述Hibernate Sample
  3. Hibernate Annotations維護(hù)驗(yàn)證邏輯
  4. Hibernate ClassValidator實(shí)例
  5. 描述Hibernate持久性類
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

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驗(yàn)證方式

2019-08-23 15:55:27

架構(gòu)大數(shù)據(jù)BI系統(tǒng)

2018-04-11 06:31:24

大數(shù)據(jù)架構(gòu)數(shù)據(jù)分析Hadoop

2009-09-27 13:42:05

Hibernate E

2021-01-06 08:04:30

Linux方式提權(quán)

2009-09-24 10:50:31

Hibernate主鍵

2009-09-27 10:19:11

Hibernate命名

2012-02-03 10:07:04

HibernateJava

2009-09-23 14:23:51

Hibernate主鍵

2009-09-27 17:13:36

Hibernate V

2009-09-23 17:18:16

Hibernate S

2009-09-24 09:45:23

Hibernate批量

2009-09-24 13:49:31

Hibernate自增

2009-09-23 14:00:07

Hibernate連接

2009-09-28 14:54:33

Hibernate映射
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)