Hibernate注解详解:持久化类映射与主键生成策略

需积分: 34 12 下载量 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应用程序的关键部分。