Hibernate框架的主鍵生成策略
在Hibernate中,id元素的<generator>子元素用於生成持久化類的對象的唯一標識符,也就是主鍵。Hibernate框架中定義了許多主鍵生成策略類,也叫生成器類。所有的生成器類都實現了org.hibernate.id.IdentifierGenerator接口。通過實現IdentifierGenerator接口來創建自己的生成器類。Hibernate框架提供了許多內置的生成器類:
- assigned
- increment
- sequence
- hilo
- native
- identity
- seqhilo
- uuid
- guid
- select
- foreign
- sequence-identity
1、assigned
如果沒有使用<generator>元素,assigned是默認的生成器策略。在這種情況下,應用程序為對象分配ID。
2、increment
當沒有其他進程將數據插入此表時,它才會生成唯一的ID。它生成short,int或long型標識符。第一個生成的標識符通常為1,然後每次遞增為1。
3.、sequencce
它使用數據庫的順序序列。如果沒有定義序列,它會自動創建一個序列。在Oracle數據庫的情況下,它將創建一個名為HIBERNATE_SEQUENCE的序列。在DB2、SAP DB、Postgre SQL 或McKoi的情況下,它使用序列(sequence),但在interbase中使用生成器。使用sequence類型時,<generator>元素中藥使用<param>子元素指定序列名稱。
........ <id...> <generator class="sequence"> <param name="sequence">h_test</param> </generator> </id> ........
4.hilo
它使用高低算法來生成short,int和long類型的id。
5、native
它使用標識、序列或希洛取決於數據庫供應商。
6、indentity
它用於Sybase、Mysql、MS SQL Server、DB2和Hypersonic SQL 支持id列。返回的ID類型為short、int或long。
7、seqhilo
它在指定的序列名稱上使用高低算法。返回的ID類型為short、int和long。
8.uuid
它使用128位UUID算法生成id。返回的ID是String類型,在網絡中是唯一的(因為使用了IP)。UUID以十六進制數字標識,長度為32。
9、guid
它使用由字符串類型的數據庫生成的GUID。它適用於MS SQL Server 和MySQL。
10、select
它使用數據庫觸發器返回主鍵。
11、foreign
它使用另一個關聯對象的id,主要用於一對一關聯。
12、sequence-identity
它使用特殊的序列生成策略。僅在Oracle 10g驅動程序中支持。
備註:hilo和seqhilo生成策略的高低算法即hi/lo算法。hi:高值------從數據庫取得的那個值;lo:低值------hibernate自動維護,取值1到max_low;max_low:映射文件中配置的那個值。
Hibernate框架的主鍵生成策略