Hibernate3----JPA

1.1 JPA

(1)JPA是一套java持久化规范; 而hibernate实现了JPA规范. 

(2)在hibernate中, 有两套操作数据库的方式, 一套是hibernate自己特有的方式, 还有一套是实现了JPA规范的方式

2. 常用API

(1)EntityManagerFactory :  他是JAP规范中生产EntityManager的工厂, 要保证一个工程中只有一个EntityManagerFactory.  等于SessionFactory

(2)EntityManager :  实体类管理器, 用来做CRUD的.   等于 session

(3)Persistence :  JPA规范中的工具类, 用于获取EntityManagerFactory的

(4)EntityTransaction :  JPA规范中的事务接口, 用来管理JPA规范中的事务. 等于Transaction

(5)EntityManager.persist() :  用来保存对象的. 等于session.save()

3. 常用注解

在实体类上加JPA注解, 取代传统的hbm.xml 文件的功能. 

(1) @Entity :  如果在一个类上加此注解, 表示该类是一个实体类

(2) @Table :  指定该类所映射的表, name属性表示该类所映射的表名. 如果类名与表名一致, 此注解可以省略

(3) @Id :  表示与主键列对应的属性

(4)GeneratedValue :  表示主键如何生成. strategy属性: 指定主键生成的策略.

(5)@Column :  指定实体类属性和数据库表里列之间的对应关系

属性:   1.name: 指定数据库表的列名

            2.unique: 是否唯一

            3.nullable:  是否可以为空

            4.insertable:  是否可以插入

            5.updateable:  是否可以更新

            6.columnDefinition:  定义建表时创建此列的DDL

            7.secondaryTable:  从表名. 如果此列不在主表上(默认建在主表上), 该属性定义该列所在从表的名字

3.1 主键生成策略

@GeneratedValue: 为一个实体类生成一个唯一标识的主键(JPA要求每一个Entity, 必须有且只有一个主键). 它有两个属性, 分别是strategy和generator. 

generator: 默认为空字符串, 它定义了主键生成器的名称, 对应的生成器有两个:  对应于同名的主键生成器@SequenceGenerator和@TableGenerator

strategy: 一共有四种, 被定义在枚举Generation中, 包括: TABLE, SEQUENCE, IDENTITU, AUTO

(1)IDENTITY : 主键由数据库自动生成(自动增长型)

(2)SEQUENCE: 根据底层数据库的序列来生成主键, 条件是数据库支持序列

(3)AUTO: 根据底层数据库自动选择一种策略

(4)TABLE: 使用一个特定的数据库表格来保存主键

注: 配置文件要在src下新建META-INF文件夹,新建persistence.xml文件。

4. 一对多关系常用注解

(1)@OneToMany : 建立一对多关系映射

属性

targetEntityClass :  指定多的一方的类的字节码

mappedBy :  指定从表实体类中引用主表对象的名称. 让主表(一方)放弃外键维护

cascade :  指定要使用的级联操作

fetch :  指定是否采用延迟加载

orphanRemoval : 是否使用孤儿删除

(2)@ManyToOne : 建立多对一的关系

属性

targetEntityClass :  指定一的一方实体类字节码

cascade :  指定要使用的级联操作

fetch : 指定是否采用延迟加载

optional :  关联是否可选. 如何设置为false, 则必须始终存在非空关系

(3)  @JionColumn :  用于定义主键字段和外键字段的对应关系

属性

name : 指定外键字段的名称

referencedColumnName :  指定引用主表的主键字段的名称

unique :  是否唯一,  默认值不唯一

nullable :  是否允许为空,  默认值允许

insertable : 是否允许插入, 默认只允许

updateble :  是否允许更新, 默认值允许

columnDefinition :  列的定义信息

5. JPA里的对象导航查询

在JPA中, 查询一方延迟加载多方数据, 这点和xml配置时一样的.  而查询多方立即加载一方数据, 这点和xml正好是相反的. 我们不需要改变这种情况, 因为我们就是需要查询多方立即加载一方数据

提示: 如果想改变默认的抓取策略, 可以给OneToMany、ManyToOne注解加 fetch 属性, fetch属性有两个值

(1) EAGER: 表示立即加载

(2) LAZY: 表示延迟加载

你可能感兴趣的:(Hibernate)