首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Hibernate 實戰入門 (一):資料庫設計與主鍵生成策略遷移

     編輯:Java 程式設計入門

專案背景:餐廳管理系統 (RMS)

本系列記錄作者首個成功的 Hibernate 實戰專案,環境:Windows 2000 + JBuilder X + SQL Server 2000。核心亮點:將主鍵生成策略從資料庫 IDENTITY 遷移至 Hibernate 管理,體現 ORM 核心價值——持久化邏輯屬於應用層,而非資料庫層。

原始資料庫設計 (A 版):資料庫自增主鍵

CREATE TABLE Houses (
    HID int IDENTITY(1,1) PRIMARY KEY,  -- SQL Server 自增
    alias varchar(20),
    description varchar(100),
    capity int NOT NULL
);
-- 其他表 Menus, Tables, Customers, Staffs, Notice 同理使用 IDENTITY

Hibernate 化設計 (B 版):應用層掌控主鍵

關鍵變更:移除所有 IDENTITY(1,1),主鍵類型改為 INT,由 Hibernate <generator> 策略生成。

CREATE TABLE Houses (
    HID INT PRIMARY KEY,  -- 無 IDENTITY
    alias VARCHAR(20),
    description VARCHAR(100),
    capity INT NOT NULL
);
-- 其他表同理:MID, TID, CID, SID, NID 均為 INT/VARCHAR PRIMARY KEY

主鍵生成策略對比與選型

策略適用場景Hibernate 配置優/缺點
increment單進程、單數據庫、開發測試<generator class="increment"/>內存計數器,重啟歸零,集群不安全
identity資料庫支援自增 (MySQL, SQL Server, PostgreSQL)<generator class="identity"/>依賴資料庫,批次插入無法獲取 ID
sequence支援 Sequence 的資料庫 (Oracle, PostgreSQL, DB2)<generator class="sequence"/>高性能、可預分配、支援批次
native跨資料庫移植項目<generator class="native"/>自動選擇 identity/sequence/hilo,但行為不一致
assigned業務主鍵、自然鍵、外部系統同步<generator class="assigned"/>應用手動賦值,完全可控
uuid/guid分布式系統、無中心協調<generator class="uuid.hex"/>全局唯一、無序、索引性能稍弱

本專案選型分析

  • Houses 使用 increment:單機開發環境,簡單易用。
  • 生產環境建議:SQL Server 2000 可用 identity 或自建 Sequence 模擬表;Oracle 必用 sequence;分布式微服務首選 uuid 或 Snowflake 算法。
  • 核心原則:主鍵生成策略應在 .hbm.xml 或 @GeneratedValue 中聲明,而非依賴 DDL IDENTITY,實現「持久化邏輯Java化」。

下一步預告

下篇將展示:Eclipse/MyEclipse 逆向生成 POJO 與映射文件、hibernate.cfg.xml 配置、測試類編寫與驗證主鍵生成效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved