
- Hibernate 教程
- Hibernate - 首頁
- ORM - 概述
- Hibernate - 概述
- Hibernate - 架構
- Hibernate - 環境
- Hibernate - 配置
- Hibernate - 會話
- Hibernate - 持久化類
- Hibernate - 對映檔案
- Hibernate - 對映型別
- Hibernate - 示例
- Hibernate - O/R 對映
- Hibernate - 級聯型別
- Hibernate - 註解
- Hibernate - 查詢語言
- Hibernate - Criteria 查詢
- Hibernate - 原生 SQL
- Hibernate - 快取
- Hibernate - 實體生命週期
- Hibernate - 批次處理
- Hibernate - 攔截器
- Hibernate - ID 生成器
- Hibernate - 儲存圖片
- Hibernate - log4j 整合
- Hibernate - Spring 整合
- Hibernate - Struts 2 整合
- Hibernate - Web 應用
- 對映表示例
- Hibernate - 表繼承策略(每個層次結構一張表)
- Hibernate - 表繼承策略(每個具體類一張表)
- Hibernate - 表繼承策略(每個子類一張表)
- Hibernate 有用資源
- Hibernate - 常見問題解答
- Hibernate - 快速指南
- Hibernate - 有用資源
- Hibernate - 討論
Hibernate - ID 生成器
生成器類用於為物件生成 ID,該 ID 將成為資料庫表的 primary key。所有生成器類都實現 **org.hibernate.id.IdentifierGenerator** 介面。可以透過實現上述介面並覆蓋 **generator(SharedSessionContractImplementor sess, Object obj)** 方法來建立自己的生成器類。
檢視下面的 employee.hbm.xml 檔案片段
<hibernate-mapping> <class name="com.mypackage.Employee" table="emp"> <id name="id"> <generator class="assigned"></generator> </id> ... </hibernate-mapping>
生成器類的型別
**Hibernate** 提供了許多預定義的 **生成器** 類。Hibernate 中一些重要的預定義生成器類包括:
**assigned** - 此生成器指示應用程式將分配 primary key 值。在這種情況下,Hibernate 不會生成任何值。
**identity** - 此生成器使用資料庫的自增功能來生成 primary key 值。它適用於大多數資料庫,並且適用於簡單的用例。Oracle 不支援 identity 生成器。MySQL、MS SQL Server、DB2 等支援此功能。
**sequence** - 此生成器使用資料庫序列來生成 primary key 值。在某些情況下,它提供了比 identity 更好的效能和控制。
建立序列的命令
create sequence <sequence_name> start with <number> increment by <number>
**注意** - MySQL 不支援序列。Oracle 支援序列。
employee.hbm.xml 中的條目
<hibernate-mapping> <class name="com.mypackage.Employee" table="emp"> <id name="id"> <generator class=”sequence”> <param name=”sequence”>datasource_name</param> </generator> </id> ... </hibernate-mapping>
**increment** - 此生成器透過遞增儲存在記憶體中的值來生成 primary key 值。
**hilo** - 此生成器使用高低演算法來生成 primary key 值。它結合了 sequence 和 increment 的優點。
**uuid** - 此生成器生成通用唯一識別符號 (UUID) 作為 primary key 值。它適用於需要唯一 ID 的分散式系統。
**native** - 此生成器將 primary key 生成策略委託給底層資料庫。如果底層資料庫支援 identity,則選擇 identity。否則,選擇 sequence 或 hilo。它根據資料庫方言選擇最佳策略。
**foreign** - 此生成器使用另一個關聯實體的 primary key 值作為當前實體的 primary key 值。
使用註解生成 ID
我們可以使用 IDENTITY 生成器註解來生成 ID 欄位。請參見下面的示例
@Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // ... other fields }