Hibernate注解不仅可以替换复杂的映射文件,甚至可以逆向生成数据库表
1、需要导入的jar包类列表
hibernate-annotations.jar hibernate-commons-annotations.jar ejb3-persistence.jar
2、配置实体类的常用注解
@Entity 将一个类声明为实体Bean(即一个持久化POJO类)
@Id 声明该实体Bean的标识属性(相当于数据表的主键)
@GeneratedValue 定义标识符的生成策略
@Table 为实体Bean映射指定表(table)、目录(也就是数据库名)(catalog)和schema的名称。默认值:实体Bean的类名,不带包名
@UniqueConstraint 定义表的唯一约束
@Lob 表示属性将被持久化为Blob或者Clob类型
@Column 将属性映射到列
@Transient 将忽略这些字段和属性,不用持久化到数据库
3、配置对象关联关系
@OneToOne
@OneToMany
@ManyToOne
@ManyToMany
举例说明:比如年级表和学生表的一对多关系
在学生表中
@ManyToOne(fench=FetchType.LAZY)//延迟加载 @JoinColumn(name="GID")//声明外键,GID是数据库学生表中的某一列,表示外键关联到年级表
在年级表中
//指定学生的关联属性,延迟加载,级联删除和级联增加 @OneToMany(mappedBy="grade",fetch="FetchType.LAZY",cascade={CasCadeType.REMOVE,CasCadeType.PERSIST})
总结:
在“一”的一方,@ManyToOne中通过mappedBy属性指定“多”方的关联属性。在双向关联关系中,有且仅有一端作为主体端存在,主体端负责维护更新,对于不需要维护这种关系的从表则通过mappedBy属性声明,指定另一主体的关联属性,相当于inverse="true",即将控制权反转,自己甩手休息不维护关联关系
在“多”方,通过@JoinColumn指定“多”方定义的外键字段
fetch属性指定关联关系获取方式,即是否采用延迟加载
cascade属性指定级联操作
CasCadeType.REMOVE 级联删除
CasCadeType.PERSIST 级联增加
CasCadeType.MERGE 级联更新
CasCadeType.REFRESH 级联刷新
CasCadeType.ALL 包含所有级联操作