對於映射文件中的主鍵,我們習慣於於讓該字段能夠自動增長,來保證其唯一性。
但是,不同的數據庫自動增長的方式並不是相同的。如在SQLSERVER中,用identity,MYSQL中,有increment,Oracle中通常采用sequence。這樣一來,在數據庫的主鍵列操作上,便會顯得比較麻煩。
在Hibernate中,提供了主鍵生成策略。下面是比較常用的幾種:
1.uuid
用一個128-bit的UUID算法生成字符串類型的標識符。
在一個網絡中唯一(生成算法使用了IP地址)。
UUID被編碼為一個32位16進制數字的字符串。
2.assigned
手動分配數據庫主鍵增長方式。
由於是手動分配的,所以在執行新增操作時,需查詢數據庫判斷生成的主鍵是否已經存在。
3.increment
主鍵按數值順序遞增。此方式的實現機制為在當前應用實例中維持一個變量,以保存著當前的最大值,之後每次需要生成主鍵的時候將此值加1作為主鍵。
4.identity
主要適用於sqlserver數據庫的自動增長列的表,從1開始。
5.native
根據不同的數據庫采用不同的主鍵生成策略。比如,當前數據庫為sqlserver,則會采用identity,如為oracle,則采用oracle中的sequence等。
區分數據庫的不同是以hibernate主配置文件中sessionFactory中配置的數據庫方言。
當然還有其他的主鍵生成策略,我就不在這裡一一贅述了。