Hibernate的基本注解

1 基础实体类注解

@Entity注解

在实体上面写上 @Entity(name=”t_student”)

在主键 如id的get方法上面注上@Id 表明主键

根据实体类生成一个表结构

@Table注解

@Table(name="",catalog="",schema="")

与@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据表信息

两个属性 一个name 映射表的名称 一个schema 映射数据库的名称

@Embeddable注解

表示一个非Entity类可以嵌入到另一个Entity类中作为属性存在

不会映射到一张表 可以嵌入到其它实体类中作为属性存在


2 属性注解

Hibernate的基本注解

@Id 一个实体如果有多个@Id注解 就要实现Serializeable接口

如果一个字符串类型作为主键就要设置字段长度 @Column(length=8)

@GeneratedValue 定义主键的生成策略

Hibernate的基本注解

第四种的结合@TableGenerator 第一个参数是参考的表名,第二个是给这个表分配的空间

Hibernate的基本注解

主键 手工赋值的生成方法

 Hibernate的基本注解

测试

Hibernate的基本注解

不是getTransaction() 是beginTransaction()

 

@Column注解

Hibernate的基本注解

@Embedded 注释表明这个属性是嵌入类 嵌入类也要加上@Embeddable注解

Hibernate的基本注解

用StudentPK类包含两个主键 然后这个类要实现Serializable接口,最好加个序列化编号 ,有默认的无参数构造方法 ,覆盖equals和hashCode方法

在StudentPK中

Hibernate的基本注解

在Student中

Hibernate的基本注解

@Transient 注解 不想把某个属性映射到数据库当中

Hibernate的基本注解

3 关系映射注释

单向1对1映射

Student(被控)和IdCard(主控)类

在Student类中

Hibernate的基本注解

@OneToOne中的属性是级联关系 ALL表示全级联

@JoinColumn中的name 表示被控方的外键  unique表示是唯一的

在IdCard中

Hibernate的基本注解

双向1对1映射mappedBy的值是主控方的外键值 这里主控方式Students

为什么设置mappedBy这个属性?

因为student和idcard这两个东西插入数据的时候,两个互为对方外键,后插入哪个都不行,必须要讲主动权交给一方,这里就是在被控方设置这个

Hibernate的基本注解

单向一对多的映射

Student类和Classroom类

在多的那一方设置1的外键

在Student类中加入 fetch是抓取策略 @JoinColumn的name值是1的一方的主键,referencedColumnName是在数据库生成表的时候的外键的列名

Hibernate的基本注解

双向一对多映射 一方持有另一方的集合

对于抓取策略 多方设置EAGER,一方设置LAZY(懒加载)

在Classroom类中加入

Hibernate的基本注解

多对多单向外键

Teacher类和Student类

其中一个对方持有另一个多方的集合对象 需要创建中间表

@JoinTable中name是中间表的名称joinColumns是当前类主键的名称

inverseJoinColumns是集合类的主键名称

Hibernate的基本注解

双向多对多

就是在单向多对多的基础上配置另一方

比如配置Teacher类  将主控权交给学生

Hibernate的基本注解