Hibernate注解详解:实体Bean与数据库表映射

需积分: 9 8 下载量 37 浏览量 更新于2024-09-16 1 收藏 220KB DOCX 举报
"这篇文档详细介绍了Hibernate注解的使用,包括如何声明实体Bean、定义数据库表、实现乐观锁以及管理属性的持久化状态。" 在Java的ORM框架Hibernate中,注解是一种强大的工具,它允许开发者以声明式的方式定义对象与数据库之间的映射关系,从而简化了传统XML配置的复杂性。以下是关于Hibernate注解的一些关键知识点: 1. **声明实体Bean** 使用`@Entity`注解标记一个Java类作为持久化实体Bean。例如: ```java @Entity public class Flight implements Serializable { Long id; // ... } ``` `@Id`注解则用于标识实体Bean的主键字段,如这里的`id`字段。 2. **属性和方法的映射** Hibernate支持对类的属性(field)或getter/setter方法(property)进行注解。属性使用field类别,而getter/setter使用property类别。例如,`getId()`和`setId()`方法对应于属性`id`的property类别。 3. **定义数据库表** `@Table`注解用来指定实体Bean对应的数据库表名。如果需要,还可以指定schema和catalog: ```java @Table(name="tbl_sky", uniqueConstraints={ @UniqueConstraint(columnNames={"month","day"}) }) ``` 这样会在表的`month`和`day`字段上创建一个唯一约束。 4. **乐观锁**(Optimistic Locking) `@Version`注解用于实现乐观锁,它会在数据库中添加一个版本字段,比如`OPTLOCK`,用于检测并发更新时的数据冲突。每次更新时,Hibernate会检查版本号是否匹配,如果不匹配,则抛出异常。 ```java @Version @Column(name="OPTLOCK") public Integer getVersion() {} ``` 5. **忽略属性** 非`static`和非`transient`的属性默认会被持久化,除非使用`@Transient`注解将其标记为非持久化属性。例如: ```java public transient int counter; // 这个属性不会被持久化 ``` 6. **基本属性注解** (`@Basic`) 默认情况下,所有属性都使用`@Basic`注解,表示其是最基本的属性映射。不过在某些情况下,可能需要自定义属性的映射行为,例如设置列的长度、精度等。 7. **其他注解** 除了上述注解,Hibernate还提供了许多其他注解,如`@ManyToOne`、`@OneToOne`、`@OneToMany`和`@ManyToMany`用于处理关联关系,`@GeneratedValue`用于自动生成主键值,`@Temporal`用于处理日期时间类型等。 通过熟练掌握这些注解,开发者可以更高效地使用Hibernate进行对象关系映射,减少与数据库交互的复杂性,提高开发效率。