Hibernate注解详解:持久化类映射与主键生成策略
需积分: 34 149 浏览量
更新于2024-09-09
1
收藏 37KB DOC 举报
Hibernate注解是Java Persistence API (JPA)的一部分,用于在EJB3.0和后续版本中简化Java对象与关系数据库之间的映射和持久化操作。这些注解允许开发者在不编写大量XML配置的情况下,以面向对象的方式管理数据库对象。
1. **@Entity**:这个注解用于声明一个Java类为一个实体Bean,即一个持久化的POJO(Plain Old Java Object),它将成为数据库中的一个实体,存储和检索数据。
2. **@Id**:标记为标识属性的字段,它代表了实体的主键,通常与数据库表中的主键列相对应。
3. **@Table**:指定实体映射到哪个数据库表,以及表所在的目录(catalog)和schema(命名空间)。这有助于数据库的组织和命名规则。
4. **@Column**:用于映射类的属性到数据库表的列。它可以设置列名、唯一性约束、可空性、插入和更新行为,以及SQL DDL片段,用于定制列的定义。
5. **@GeneratedValue**:用于指定主键的生成策略,包括:
- **GenerationType.AUTO**:默认策略,由程序控制,主键通常自增或根据数据库策略。
- **GenerationType.TABLE**:使用数据库中的一个表来存储生成的主键。
- **GenerationType.IDENTITY**:数据库自动生成主键,如Oracle的序列。
- **GenerationType.SEQUENCE**:利用数据库支持的序列生成主键。
- **generator**:指定特定的生成器,如Oracle序列。
6. **@SequenceGenerator**:用于定义数据库序列生成器,用于配合@GeneratedValue指定序列生成策略。
7. **@GenericGenerator**:更灵活的生成器,支持多种策略,如:
- **native**:使用数据库内置的生成机制(如Oracle的序列)。
- **uuid**:使用UUID算法生成主键。
- **hilo**:使用Hilo算法,涉及额外的表来存储增量。
- **assigned**:程序分配主键,类似JPA的AUTO。
- **identity**:针对支持的数据库(如MySQL和SQL Server)使用自增字段。
- **select**:很少用的旧策略,通过触发器生成主键。
- **sequence**:指定特定的数据库序列。
- **seqhilo**:结合Hilo和序列策略。
- **increment**:每个Hibernate实例内部维护计数器,不适用于多实例环境。
- **foreign**:关联其他对象的主键,常用于一对一关系。
- **guid**:使用数据库底层的GUID算法。
- **uuid.hex**:推荐使用UUID替代。
- **sequence-identity**:基于序列的立即检索策略。
8. **@OneToOne**:描述一对一关系,可以配置级联操作(PERSIST, REMOVE, REFRESH, MERGE, ALL)来管理关联对象的生命周期。有三种关联方式:
- 方法一:使用`@PrimaryKeyJoinColumn`,要求主表和从表主键一致。
- 方法二:指定外键列和反向引用属性。
- 方法三:使用`@JoinTable`进行更复杂的关联配置。
9. **@ManyToOne**:多对一关系,也有级联选项和外键配置,可以指定外键列或使用`@JoinTable`。
10. **@OneToMany**:一对多关系,配置级联操作和fetch策略(LAZY或EAGER)。有两种关联方式:
- 方法一:简单配置,只处理添加和读取时的关系。
- 方法二:使用Map结构,提供更灵活的数据访问。
- 方法三:允许修改多端的外键,提供更直接的数据库映射。
Hibernate注解提供了强大的工具,使得Java开发者能够更方便地将Java对象映射到数据库,并管理对象之间的关系,降低了数据库操作的复杂性。理解并熟练使用这些注解是构建企业级Java应用程序的关键部分。
2024-11-11 上传
2024-11-11 上传
219 浏览量
106 浏览量
2023-06-13 上传
2023-08-25 上传

君莫傲
- 粉丝: 4096
最新资源
- React.js实现的简单HTML5文件拖放上传组件
- iReport:强大的开源可视化报表设计器
- 提升代码整洁性:Eclipse虚线对齐插件指南
- 迷你时间秀:个性化系统时间显示与管理工具
- 使用ruby-install一次性安装多种Ruby版本
- Logality:灵活自定义的JSON日志记录器
- Mogre3D游戏开发实践教程免费分享
- PHP+MySQL实现的简单权限账号管理小程序
- 微信支付统一下单签名错误排查与解决指南
- 虚幻引擎4实现的多边形地图生成器
- TouchJoy:专为触摸屏Windows设备打造的屏幕游戏手柄
- 全方位嵌入式开发工具包:ARM平台必备资源
- Java开发必备:30个实用工具类全解析
- IBM475课程资料深度解析
- Java聊天室程序:全技术栈源码支持与学习指南
- 探索虚拟房屋世界:house-tour-VR应用体验