1. 程式人生 > >Hibernate主鍵生成方式

Hibernate主鍵生成方式

Key Generator
主鍵產生器
可選項說明:
1) assigned
主鍵由外部程式負責生成,無需Hibernate參與。

2) hilo
通過hi/lo 演算法實現的主鍵生成機制,需要額外的資料庫表儲存主
鍵生成歷史狀態。

3) seqhilo
與hilo 類似,通過hi/lo 演算法實現的主鍵生成機制,只是主鍵歷史
狀態儲存在Sequence中,適用於支援Sequence的資料庫,如Oracle。

4) increment
主鍵按數值順序遞增。此方式的實現機制為在當前應用例項中維持
一個變數,以儲存著當前的最大值,之後每次需要生成主鍵的時候
將此值加1作為主鍵。
這種方式可能產生的問題是:如果當前有多個例項訪問同一個資料
庫,那麼由於各個例項各自維護主鍵狀態,不同例項可能生成同樣
的主鍵,從而造成主鍵重複異常。因此,如果同一資料庫有多個實
例訪問,此方式必須避免使用。

5) identity
採用資料庫提供的主鍵生成機制。如DB2、SQL Server、MySQL
中的主鍵生成機制。

6) sequence
採用資料庫提供的sequence 機制生成主鍵。如Oralce 中的
Sequence。

7) native
由Hibernate根據底層資料庫自行判斷採用identity、hilo、sequence
其中一種作為主鍵生成方式。

8) uuid.hex
由Hibernate基於128 位唯一值產生演算法生成16 進位制數值(編碼後
以長度32 的字串表示)作為主鍵。

9) uuid.string
與uuid.hex 類似,只是生成的主鍵未進行編碼(長度16)。在某些
資料庫中可能出現問題(如PostgreSQL)。

10) foreign
使用外部表的欄位作為主鍵。
一般而言,利用uuid.hex方式生成主鍵將提供最好的效能和資料庫平臺適
應性。

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

相關推薦

hibernate 生成方式

程序 操作 外部 解鎖 數據庫表 body 要求 讀寫 字符串表 1)assigned主鍵由外部程序負責生成,無需Hibernate參與。2)hilo通過hi/lo 算法實現的主鍵生成機制,需要額外的數據庫表保存主鍵生成歷史狀態。3)seqhilo與hilo 類似,通過hi

Hibernate生成方式

Key Generator主鍵產生器可選項說明:1) assigned主鍵由外部程式負責生成,無需Hibernate參與。2) hilo通過hi/lo 演算法實現的主鍵生成機制,需要額外的資料庫表儲存主鍵生成歷史狀態。3) seqhilo與hilo 類似,通過hi/lo 演算法實現的主鍵生成機制,只是主鍵歷史

Hibernate (三)生成方式

參考文獻: http://blog.csdn.net/wanghuan203/article/details/7562395 http://www.cnblogs.com/hoobey/p/5508992.html 宣告:主鍵生成配置直接摘抄了http://www.cnbl

Hibernate各種生成方式配置

1、assigned 主鍵由外部程式負責生成,在save()之前必須指定一個。Hibernate不負責維護主鍵生成。與Hibernate和底層資料庫都無關,可以跨資料庫。在儲存物件前,必須要使用主鍵的setter方法給主鍵賦值,至於這個值怎麼生成,完全由自己決定,這種方法應

hibernate的11種生成方式

hibernate提供了很多種主鍵的生成方式,以解決實際開發中各種不同的資料庫以及其主鍵的策略,以前的時候,也有用過很多種,但是都不全面,這次在書上看到了,便記錄下來,方便以後檢視,使用。 1.

Hibernate的uuid生成方式

從hibernate3.0開始已經不再支援uuid.string,檢視changelog可以發現: Changes in version 3.0 beta 1 (21.12.2004) * removed uuid.string and renamed uuid.hex to plain uuid,hiber

Hibernate 生成策略

關閉 min conn mine 數據 xml文件 ive orm 刪除 第一步:引入jar包 省略 第二部:創建實體類 package cn.hibernate.bean; public class Student { private Integer sId;

Hibernate生成策略

要求 mage src ble 配置 生成策略 padding pac 之前 Hibernate主鍵生成策略 1 hibernate要求實體類裏面有一個屬性作為唯一值,對應表主鍵,主鍵可以不同生成策略 2 hibernate主鍵生成策略有很多的值 3 在cl

Hibernate生成策略strategy = "increment"報錯違反唯一性約束

block 一個 blog tps 發現 rate 51cto image 主鍵 背景2018年7月份,系統爆出一條bug。就是支持Excel導入的功能,導入第二次同模板不同數據時,報錯,違反唯一性約束。就死活用不了了,重啟Tomcat才能恢復使用。但只能到一個文件 分析需

Hibernate(2)——IDEA+maven+hibernate生成策略

Maven版本hibernate程式 Pom.xml <dependencies>       <dependency>      

Hibernate生成的策略

increment increment策略是指,不使用資料庫本地的自增長策略,而是由程式(Hibernate框架)產生一個自增長的ID值,賦予資料庫. 每次插入前都會去查詢表中id最大的值,然後+1作為新主鍵 hilo(瞭解)

hibernate 生成策略

hibernate的主鍵生成器: generator元素:表示了一個主鍵生成器,它用來為持久化類例項生成唯一的標識 。 1.1 程式設計師自己控制:assigned 1.2 資料庫控制: identity(標識列/自動增長) sequence 1.3 hib

Hibernate--生成策略

原文地址:http://blog.csdn.net/kalision/article/details/9014023 Hibernate有很多值得學習的地方,這裡我們主要介紹Hibernate主鍵,包括介紹Assigned方式、Increment方式和Foreign GUID等方面。 Hibernate主

Hibernate生成策略解讀

Hibernate主鍵生成策略比較多,需要對這幾種策略有一定的瞭解才能更好的服務於你的專案,下面對幾種常見的Hibernate的主鍵生成策略進行解讀,一方面可以當做讀者的學習資料,另一方面可以為自己起

Hibernate生成策略總結

轉載自:http://blog.csdn.net/wanghuan203/article/details/7562395 Hibernate提供的主鍵生成策略,使我們可以在實體類的對映xml檔案中設定關鍵字來告訴hibernate我們要使用的主鍵生成方式,然後hibe

Hibernate 學習(三)Hibernate生成策略

生成主鍵的幾種形式 通過JPA的策略生成器來進行生成:JPA hibernate 其他的ORM框架照樣支援 GenerationType.TABLE,SEQUENCE Hiberante : foriegn uuid 自定義主鍵生成方式 TABLE快取

簡述Hibernate生成策略

HIbernate的主鍵型別有很多種,下面給大家介紹六種常見的主鍵型別 1.assigned:     assigned主鍵由外部程式生成,在save()之前必須指定一個。assigned主鍵型別與HIbernate和底層資料庫都無關,所以可以跨資料庫操作。assigne

ibatis生成方式 用序列實現自動增長 查詢方式

select seqname.currval from dual   查詢序列當前值 select seqname.nextval from dual   查詢序列下一值 主鍵用序列來建立       1.先新建一個序列SEQ_RD_CI_APPSUBSYSTEM_ID  

Hibernate生成策略之Hilo

使用hilo生成策略,要在資料庫中建立一張額外的表,預設表名為hibernate_unique_key,預設欄位為integer型別,名稱是next_hi 我們也可以自己設定自定義的表名和欄位名 <id name="id" type="integer">   &l

Hibernate生成策略與save()方法是否發sql語句的研究

    public class SessionFlushTest extends TestCase {              /**     * 測試uuid主鍵生成策略     */       public void testSave1() {