Hibernate生成器類

在Hibernate中,id元素的<generator>子元素用於生成持久化類的對象的唯一識別字。 Hibernate框架中定義了許多生成器類。

所有的生成器類都實現了org.hibernate.id.IdentifierGenerator介面。 應用程式員可以通過實現IdentifierGenerator介面來創建自己的生成器類。 Hibernate框架提供了許多內置的生成器類:

  1. assigned
  2. increment
  3. sequence
  4. hilo
  5. native
  6. identity
  7. seqhilo
  8. uuid
  9. guid
  10. select
  11. foreign
  12. sequence-identity

1. assigned

如果沒有使用<generator>元素,assigned是默認的生成器策略。在這種情況下,應用程式為對象分配ID。 例如:

....
 <hibernate-mapping>
  <class ...>
    <id ...>
     <generator class="assigned"></generator>
    </id>

    .....

  </class>
 </hibernate-mapping>

2. increment

當沒有其他進程將數據插入此表時,才會生成唯一的ID。 它生成shortintlong型識別字。 第一個生成的識別字通常為1,然後每次遞增為1。語法:

....
 <hibernate-mapping>
  <class ...>
    <id ...>
     <generator class="increment"></generator>
    </id>

    .....

  </class>
 </hibernate-mapping>

3. sequence

它使用資料庫的順序序列。如果沒有定義序列,它會自動創建一個序列。 在Oracle資料庫的情況下,它將創建一個名為HIBERNATE_SEQUENCE的序列。 在Oracle,DB2,SAP DB,Postgre SQL或McKoi的情況下,它使用序列(sequence),但在interbase中使用生成器。
語法:

.....
 <id ...>
  <generator class="sequence"></generator>
 </id>
 .....

要定義自己的序列,請使用generatorparam 子元素。

.....
 <id ...>
  <generator class="sequence">
      <param name="sequence">your_sequence_name</param>
  </generator>
 </id>
 .....

4. hilo

它使用高低演算法來生成shortintlong類型的id語法

.....
 <id ...>
  <generator class="hilo"></generator>
 </id>
 .....

5. native

它使用標識,序列或希洛取決於資料庫供應商。 語法

.....
 <id ...>
  <generator class="native"></generator>
 </id>
 .....

6. identity

它用於Sybase,Mysql,MS SQL Server,DB2和Hypersonic SQL以支持id列。 返回的ID類型為shortintlong

7. seqhilo

它在指定的序列名稱上使用高低演算法。 返回的ID類型為shortintlong

8. uuid

它使用128UUID演算法生成id。 返回的IDString類型,在網路中是唯一的(因為使用了IP)。 UUID以十六進制數字表示,長度為32

9. guid

它使用由字串類型的資料庫生成的GUID。 它適用於MS SQL Server和MySQL。

10. select

它使用資料庫觸發器返回主鍵。

11. foreign

它使用另一個關聯對象的id,主要用於<一對一>關聯。

12. sequence-identity

它使用特殊的序列生成策略。 僅在Oracle 10g驅動程式中支持。


上一篇: Web應用程式使用Hibernate 下一篇: Hibernate使用Log4j日誌記錄(使用xml檔)