JPA和Hibernate的关系
jpa是标准接口,hibernate是jpa的一种实现,但其功能是JPA的超集。
一般在开发中,优先考虑使用JPA注解开发,这样有利于程序的移植和扩展
hibernate如何实现与JPA的关系呢?
通过Hibernate-annotation、Hibernate-entityManager、Hibernate-core三个组件来实现
Hibernate注解分类
1、类级别注解
2、属性级别注解
3、映射关系注解
类级别注解分为
@Entity:一个实体类对应数据库中的一张表,name属性指定表的名称
@Table:一般与@Entity配合使用,表示实体类对应对应数据库表的信息,三个属性分别是:name、catalog、schema属性
name:映射表的名称,只有再表名和类名不一致时使用,
catalog:表示目录的意思,默认值为空。
schema:表示模式的意思,默认值为空。
catalog和schema的区别:
一个数据库包含多个catalog(目录),一个catalog(目录)又包含多个schema(模式),一个schema又包含表、视图、字段。
oracle和mysql都不支持catalog,oracle支持schema ,指的是userID。mysql也支持schema,指的是,数据库名称。
@Embeddable:表示是一个嵌入类,指一个非Entity实体类,可以嵌入到另一个Entity类中作为一个属性存在。它不会生成表!
属性级别注解:
@ID注解:必须存在,定义映射数据库表的主键属性,一个实体类可以可以有一个或者多个属性被映射成主键,该注解可以写在主键属性上,也可以写在get方法上。
注意:如果如果有多个属性被映射成主键,那么必须实现Serializable接口
@GeneratedValue:指定主键的生成策略,包含strategy(主键生成策略)和generator属性
strategy主键生成策略包含四种:
1、GenerationType.AUTO:自增长策略,默认的,要求字段必须是整型,mysql默认的主键生成策略也是自增长。
2、GenerationType.IDENTITY:要求字段必须唯一
3、GenerationType.SEQUENCE:序列,在oracle中通过序列来指定主键,oracle中没有自增长策略
4、GenerationType.TABLE:通过表名来指定主键,必须结合@TableGenerator注解来使用
手动设置主键方式:采用主键生成器
@Id
@GeneratedValue(generator = "uid")
@GenericGenerator(name = "uid",strategy = "assigned")
@Column(length = 50)
private String id;
@Column注解:将属性映射到列,使用该注解覆盖默认值
@Transient注解:表示实体类中该属性不必映射成字段,