Hibernate实体类注解详解:@Entity、@Table与主键生成

需积分: 9 0 下载量 44 浏览量 更新于2024-09-15 收藏 238KB PDF 举报
Hibernate是Java领域的一种流行的对象关系映射(ORM)框架,它允许开发者将Java对象映射到关系型数据库中的表。在开发过程中,实体类注解起着关键作用,它们提供了对数据库表结构的明确定义和配置。本文将详细介绍几个核心的实体类注解及其功能。 1. @Entity: 这个注解是必须的,用于标记一个类代表数据库中的一个实体或表。它支持继承策略,即通过`@Inheritance(strategy=InheritanceType.JOINED)`,允许子类继承父类的属性,并在需要时覆盖或添加新的属性。如果希望改变表名,可以使用`@Entity(name="EntityName")`,其中"name"通常是可选的,但如果表名与类名不同,则需要指定。 2. @Table: 这个注解也是可选的,但通常与@Entity一起使用,用来详细指定数据库表的相关信息。它包含三个可选参数: - `name`: 表名,默认值为类名,如未指定则使用类名。 - `catalog`: 数据库目录名,默认为 Catalog(""),即空目录。 - `schema`: 数据库模式名,默认为 Schema(""),即当前数据库的默认模式。 3. @id 和 @GeneratedValue: 主键映射是必不可少的,`@id`声明一个属性为表的主键,只能有一个。`@GeneratedValue`用于配置主键生成策略,包括 AUTO(框架自动选择)、IDENTITY(数据库内建的Identity字段)、SEQUENCE(数据库Sequence)和 TABLE(额外的表)等。通过`generator`属性可以指定特定的生成器名称,如Hibernate支持的UUID生成器。 4. @Basic: 这个注解用于简单属性到数据库字段的映射。`fetch`属性控制属性的加载策略,EAGER(即时加载)和LAZY(延迟加载)供选择,默认为EAGER。`optional`属性表示属性是否允许为null,设为true则允许。 5. FetchType: 这是`@Basic`中`fetch`属性的枚举类型,用于指定是否在检索关联对象时立即加载数据,以减少数据库查询次数。EAGER表示在访问关联对象时会一次性加载,而LAZY则在首次访问时才会加载。 总结来说,这些注解在Hibernate中扮演着至关重要的角色,它们不仅确保了代码与数据库表结构的一致性,还提供了灵活的方式来控制对象之间的关联和数据的加载方式,从而优化性能和代码的可维护性。理解并熟练使用这些注解是高效开发基于Hibernate应用的关键。