利用Hibernate Annotation,可以省去編寫hbm映射檔案的麻煩
但是如果要儲存的主鍵類型是字串,例如要以會員帳號作為資料表的主鍵時
光是使用@Id @GeneratedValue來設定是不夠的
必須要使用
@Id @GeneratedValue(generator="[GeneratorName]")
@GenericGenerator(name="[GeneratorName]", strategy = "[GeneratorStrategy]")
這樣就等同於使用映射檔案時的native或是assigned
將strategy設定成assigned,主鍵就會由外部程式提供,無須Hibernate產生
以下是Hibernate的主鍵生成方式
1.assigned:
由外部程式提供的主鍵,hibernate不介入
2.hilo:
通過hi/lo 演算法實作的主鍵生成策略,需要額外的資料表保存主鍵生成歷史狀態
3.seqhilo:
與hilo 類似,通過hi/lo 演算法實作的主鍵生成策略,只是主鍵歷史狀態保存在Sequence中,適用於支援Sequence的資料庫,如Oracle
4. increment:
主鍵按數值順序遞增
5.identity
採用資料庫提供的主鍵生成策略自行產生,如DB2、SQL Server、MySQL
6.sequence
採用資料庫提供的sequence 機制生成主鍵,如Oralce 中的Sequence
7.native:
由hibernate根據資料庫類型自行選擇identity、hilo、sequence其中一種作為主鍵生成策略
8. uuid.hex and uuid.string:
由Hibernate基於128 位UUID演算法生成16 進制數值
hex和string的差別是前者進行編碼以長度32的字串表示,後者未編碼長度只有16