@Entity
使用@Entity注解,表示当前类为实体Bean,需要进行持久化
@Table(name = “user_info”, catalog = “digital”)
使用@Table注解实现数据表user_info与持久化类UserInfo之间的映射,catalog指定数据库名,name指定表名
@Id
使用@Id注解指定当前持久化类的ID标识属性
@GenericGenerator注解----自定义主键生成策略
@GeneratedValue(strategy = GenerationType.IDENTITY)
使用@GeneratedValue注解指定主键生成策略为IDENTITY ----JPA通用策略生成器
数据表中主键的生成策略有很多种方式,这里列出其中的4种
1、第一种类型IDENTITY
这是MySQL和SqlServer的主键生成方式,在主键属性上声明此主键生成类型,每次插入数据时主键会自动递增,而无需对主键赋值
2、第二种类型SEQUENCE
@GeneratedValue(strategy = GenerationType.SEQUENCE)这个注解是对于Oracle数据库的
3、第三种类型AUTO
@GeneratedValue(strategy = GenerationType.AUTO)
AUTO类型能够自动识别你所使用的数据库类型,再根据类型来生成主键策略(如使用mysql时生成mysql的主键自增策略,使用Oracle时使用Oracle的主键策略),将主键生成策略改为此类型,运行后生成的表插入数据同样会自动插入主键
4、第四种类型TABLE
基于表创建sequences的形式,自动创建 hibernate_sequences,用来保存下一条主键的信息
@Column(name = “id”, unique = true, nullable = false)
使用@Column注解指定当前属性所对应的数据表中的字段,name指定字段名,unique指定是否为唯一,nullable指定是否可为null
@Column(name = “userName”, length = 16)
使用@Column注解指定当前属性所对应的数据表的字段,name指定字段名,length指定字段长度
@DynamicInsert(false)
这是一个hibernate对类的注解,用于数据的动态插入,对于持久化类中的属性是否被赋值来动态生成sql语句
@OneToOne
一对一关联查询注解
注解@OneToOne的属性:
cascade:关联属性,这个属性定义了当前类对象操作了之后,级联对象的操作。本例中定义了:CascadeType.ALL,当前类增删改查改变之后,关联类跟着增删改查。
fetch属性:FetchType类型的属性。可选择项包括:FetchType.EAGER 和FetchType.LAZY。 FetchType.EAGER表示关系类(本例是OrderItem类)在主类加载的时候同时加载,FetchType.LAZY表示关系类在被访问时才加载。默认值是FetchType.LAZY。
mappedBy:拥有关联关系的域,如果关系是单向的就不需要,双向关系表,那么拥有关系的这一方有建立、解除和更新与另一方关系的能力,而另一方没有,只能被动管理,这个属性被定义在关系的被拥有方。双向@OneToOne,双向@OneToMany,双向@ManyToMany。
@Inheritance
Inheritance
必须定义其属性strategy
strategy=InheritanceType.SINGLE_TABLE 将父类和所有子类集合,存在一张表中,全部创建新的字段
strategy=InheritanceType.TABLE_PER_CLASS 每一个类创建一个表,这些表相互独立
strategy=InheritanceType.JOINED 将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系
@Basic(fetch=FetchType,optional=true)
可选
@Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 即为 @Basic
fetch: 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER.
(1)、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。
(2)、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。