Hibernate 注解方式深度解析
Hibernate 注解方式是替代传统 XML 映射配置的主流方案,其核心优势在于配置与实体类代码耦合度低、开发效率高、可读性强。相较于 XML 配置需要维护独立的 .hbm.xml 文件,注解可直接嵌入实体类的属性或 getter 方法上,大幅简化了配置流程。本文将从核心注解分类、关联关系映射、高级配置(如复合主键、枚举映射)等维度,系统讲解 Hibernate 注解的使用方法,并补充关键注意事项。
核心基础注解:实体与主键配置
基础注解主要解决「实体类与数据库表的映射」和「主键生成策略」两大核心问题,是所有注解配置的基础。
实体类级注解
用于标识类为 Hibernate 实体,并指定对应的数据库表信息。
| 注解 | 作用说明 | 常用属性 |
|---|---|---|
@Entity |
标识当前类是持久化实体,必须添加(否则 Hibernate 无法识别为映射类)。 | name:指定实体对应的数据库表名(默认值为实体类名,如类名 Log 对应表 log)。 |
@Table |
补充表级配置(可选,与 @Entity 配合使用)。 |
- name:同 @Entity 的 name,优先级更高; - catalog:指定数据库 catalog; - schema:指定数据库 schema; - uniqueConstraints:定义表的唯一约束(如 @UniqueConstraint(columnNames = "requestUri"))。 |
主键相关注解
主键是实体映射的核心,Hibernate 通过 @Id 标识主键字段,并通过 @GeneratedValue 指定主键生成策略,满足不同业务场景(如自增、UUID、序列等)。
(1)@Id
- 作用:标识当前字段为数据库表的主键(必须添加,一个实体类只能有一个
@Id)。 - 位置:可放在属性上或 getter 方法上(需保持全类一致,不能混合使用)。
(2)@GeneratedValue
- 作用:指定主键的生成策略(可选,若不指定则需手动设置主键值)。
- 核心属性:
strategy,取值为GenerationType枚举,共 4 种策略: