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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hibernate 中id生成策略

發(fā)布時間:2024/4/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate 中id生成策略 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)庫的設計和操作中,我們通常會給表建立主鍵。?
主鍵,可以分為自然主鍵和代理主鍵。?
自然主鍵表示:采用具有業(yè)務邏輯含義的字段作為表的主鍵。比如在用戶信息表中,采用用戶的身份證號碼作為主鍵。但是這樣一來,隨著業(yè)務邏輯的變化,主鍵就有可能要更改。比如,假設哪天身份證號碼升級成19,2位,那。。。。。。。?
代理主鍵:在表中人為的增加一個字段,該字段并沒有表示任何的業(yè)務邏輯,僅僅用來標識一行數(shù)據(jù)。比如說在用戶信息表中,增加一個用戶ID的字段。用來表示該條用戶信息的記錄。?

通常情況下,用的比較多的是代理主鍵的形式。而且,我們習慣于于讓該主鍵字段能夠自動增長,來保證其唯一性。但是,不同的數(shù)據(jù)庫自動增長的方式并不是相同的。如在SQLSERVER中,用identity,MYSQL中,有increment,ORACLE中通常采用sequence。這樣一來,在數(shù)據(jù)庫的主鍵列操作上,便會顯得比較麻煩。?
但是在Hibernate中,提供了主鍵生成策略。下面是比較常用的幾種:?
1:assigned?
----表示在新增數(shù)據(jù)時由應用程序指定主鍵的值。主要針對主鍵是采用自然主鍵的形式。這種方式,適用于主鍵列不是自動增長列。?

其缺點為在執(zhí)行新增操作時,需查詢數(shù)據(jù)庫判斷生成的主鍵是否已經(jīng)存在。?
2:increment?
----表示新增數(shù)據(jù)操作時由hibernate自動生成主鍵值。其生成的值為:先查詢該主鍵列的最大值,然后在最大值的基礎上加上1.適用于采用代理主鍵形式的主鍵列。同樣不能用于主鍵列是自動增長的表。但是,該主鍵生成策略也有些缺點。?
(1)新增數(shù)據(jù)前先查詢一遍,影響了性能。?
(2)主鍵的類型只能為數(shù)值型的int或者long?
(3)并發(fā)操作時的沖突問題。?
3:identity?
----不如說是為sqlerver數(shù)據(jù)庫量身定做的。主要適用于sqlserver數(shù)據(jù)庫的自動增長列的表。?
4:native?
----表示根據(jù)不同的數(shù)據(jù)庫采用不同的主鍵生成策略。比如,當前數(shù)據(jù)庫為sqlserver,則會采用identity,如為oracle,則采用?
oracle中的sequence等。區(qū)分數(shù)據(jù)庫的不同是以hibernate主配置文件中sessionFactory中配置的數(shù)據(jù)庫方言。?

5.uuid?


* 唯一主鍵生成辦法。從Hibernate中提取出來?

優(yōu)點:避免了生成ID 時,與數(shù)據(jù)庫的再次交道,性能上較高。但對于有的開發(fā)人員不太習慣這種id生成方式,UUID生成的32為的字符串,不同于identity 從1開始的整數(shù)。?
??

Xml代碼?
1.<id name="實體類屬性名" type="java.lang.Integer">???
2.????? <column name="對應表中主鍵字段名" />???
3.????? <generator class="assiged|increment|identity|native|........" />???
4.</id>???
<id name="實體類屬性名" type="java.lang.Integer">?
????? <column name="對應表中主鍵字段名" />?
????? <generator class="assiged|increment|identity|native|........" />?
</id>?

采用hibernate的主鍵生成策略,就可以比較靈活和方便的對表中的主鍵字段進行操作了。而且,不同的數(shù)據(jù)庫,不同的主鍵形式,也只需要修改下映射文件就可以了

總結(jié)

以上是生活随笔為你收集整理的hibernate 中id生成策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。