Hibernate 的核心任務是將 Java 對象狀態持久化到關係數據庫。持久化類 與 映射文件 是這一過程的兩大基石。本文梳理 POJO 規範、主鍵策略、屬性映射、映射文件結構與關鍵元素。
雖非強制,但遵循以下約定可獲得最佳性能與兼容性:
public/protected 均可)。Long、Integer)便於判斷臨時態。public class Employee {
private Integer id;
private String firstName;
private String lastName;
private Integer salary;
public Employee() {}
public Employee(String fn, String ln, Integer sal) {
this.firstName = fn; this.lastName = ln; this.salary = sal;
}
// Getter/Setter 省略
}
文件命名慣例:<ClassName>.hbm.xml(如 Employee.hbm.xml)。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"https://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Employee" table="EMPLOYEE">
...
</class>
</hibernate-mapping>
| 元素 | 作用 | 關鍵屬性 |
|---|---|---|
<class> | 類表映射 | name(全限定類名)、table(表名) |
<meta> | 類描述(可選) | attribute="class-description" |
<id> | 主鍵映射 | name、column、type(Hibernate 類型) |
<generator> | 主鍵生成策略 | class="native/identity/sequence/hilo/uuid/assigned" |
<property> | 普通屬性映射 | name、column、type、length、not-null |
native:根據底層數據庫自動選擇 identity/sequence/hilo(推薦跨庫項目)。identity:MySQL/SQL Server 自增列。sequence:Oracle/PostgreSQL 序列。assigned:應用程序手動分配(如業務鍵)。<hibernate-mapping>
<class name="Employee" table="EMPLOYEE">
<meta attribute="class-description">Employee entity</meta>
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<property name="firstName" column="first_name" type="string"/>
<property name="lastName" column="last_name" type="string"/>
<property name="salary" column="salary" type="int"/>
</class>
</hibernate-mapping>
CREATE TABLE EMPLOYEE (
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(20),
last_name VARCHAR(20),
salary INT,
PRIMARY KEY (id)
);
string、int、timestamp 等)負責 Java↔SQL 類型轉換。規範的 POJO + 精確的映射文件 = 穩健的 ORM 基石。掌握 <id> 生成策略、<property> 類型映射、命名慣例,能避開 80% 的配置坑。