Hibernate学习之Hibernate注解总结

参考:慕课网hibernate注解开发 https://www.imooc.com/learn/524

一、类级别的注解

@Entity

name:表的名字(可选)一般表名和类名相同

必须指定主键属性@Id

@Table

name:映射表的名称(可选)

catalog:目录(可选)默认为空

schema:模式(可选)默认为空

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

@Embeddable

表示一个非Entity类,不是一个实体类,可以嵌入到实体类中作为一个属性存在。不映射成表

二、方法级别的注解

@Id

表示映射为主键属性,可以位于主键属性或者其get方法前

如果一个实体类定义多个主键属性,则必须实现serializable接口

如果有string类型的主键,长度不能太长,需要用@column注解指定长度

@SequenceGenerator

@GeneratedValue

(可选)用于指定主键生成策略

strategy:表示主键生成策略,

取值有:

GenerationType.AUTO(默认,根据数据库底层自动选择,主键是字符串则不能指定为auto)

GenerationType.INDENTITY(根据数据库identity字段生成)

GenerationType.SEQUENCE(序列。使用squence来决定主键的取值)

GenerationType.TABLE(使用指定表来决定主键生成策略 与@TableGenerator使用)

generator:生成器

字符串的主键手动赋值

@Id

       @GeneratedValue(generator="sid")

       @GenericGenerator(name="sid",strategy="assigned")

 

@Column

将属性映射到列

Hibernate学习之Hibernate注解总结

@Embedded

表示该属性是某个嵌入类对象,嵌入类要标注@Embedable注解

@EmbededId

使用嵌入式主键类实现复合主键

嵌入式主键类必须是爱心serializable接口,必须有默认的public无参构造方法,必须覆盖equals和hashCode方法

@Lob

@Version

@Basic

@Transient

(可选) 表示该属性并非一个到数据库的字段的映射,如果不加这个注解就会映射到数据库字段并且ORM默认为其添加@Basic

 三、关系映射级别的注解

1、一对一单项外键关联

@OneToOne(cascade=CascadeType.ALL)

@JoinColumn(name=””,unique=true)

先保存外键对象,再保存主表对象

主表:

Hibernate学习之Hibernate注解总结

关联表:

Hibernate学习之Hibernate注解总结

 2、一对一双向外键关联

主表:

Hibernate学习之Hibernate注解总结

被控方:

Hibernate学习之Hibernate注解总结

3、一对一双向外键联合主键

Hibernate学习之Hibernate注解总结

4、多对一单向外键

@ManyToOne(cascade={cascadeType.ALL},fetch=FetchType.EAGER)

@JoinColumn(name=””,referencedColumn=””)

一方:

Hibernate学习之Hibernate注解总结

多方:

Hibernate学习之Hibernate注解总结

在多方添加一方。

5、一对多单向外键

@OneToMany(cascade={cascadeType.ALL},fetch=FetchType.LAZY)

@JoinColumn(name=””)

一方:

Hibernate学习之Hibernate注解总结

多方:

Hibernate学习之Hibernate注解总结

在一方添加多方

6、一对多双向外键

Hibernate学习之Hibernate注解总结

一方:

Hibernate学习之Hibernate注解总结

多方:

Hibernate学习之Hibernate注解总结

7、多对多单向外键

其中一个多方:

Hibernate学习之Hibernate注解总结

8、多对多双向外键

其中一个多方:

Hibernate学习之Hibernate注解总结

另一个多方:

Hibernate学习之Hibernate注解总结