Hibernate注解详解:持久化类映射与主键生成策略
需积分: 34 66 浏览量
更新于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应用程序的关键部分。
2008-11-18 上传
2012-05-16 上传
2013-02-02 上传
2011-09-19 上传
君莫傲
- 粉丝: 4098
- 资源: 95
最新资源
- IETI-LAB7-2021
- emd.rar_matlab例程_matlab_
- Xbee-boss:使用Paul Malmstem的python xbee库
- ETL_Project:GWU Bootcamp ETL项目
- OpenCV-MinGW-Build::eyes:MinGW在Windows上编译的OpenCV32位和64位版本。 包括OpenCV 3.3.1、3.4.1、3.4.1-x64、3.4.5、3.4.6、3.4.7、3.4.8-x64、3.4.9、4.0.0-alpha-x64、4.0.0- rc-x64、4.0.1-x64、4.1.0、4.1.0-x64、4.1.1-x64、4.5.0-with-contrib
- data-structures-and-algorithms
- contentful.swift:与Contentful的内容交付API的令人愉快的Swift接口
- StackStockRouter
- speaker_recognition.rar_语音合成_matlab_
- Allow CORS: Access-Control-Allow-Origin-crx插件
- pairgame-heroku
- 参考资料-WI-NK0103公司会议制度管理规定(09.04.30改).zip
- Golang_Homework
- TopAnimes是一个示例动漫Android应用程序-Android开发
- Landing-Page:我的编程产品组合的目标页面
- 快车时间