Hibernate框架的主鍵生成策略

忘塵天外天發表於2017-11-01

  在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:對映檔案中配置的那個值。

  

相關文章