JPA基础知识

转载自:http://www.cnblogs.com/holbrook/archive/2012/12/30/2839842.html

一,概述
JPA(Java Persistence API,Java持久化API)
JPA维护一个Persistence Context(持久化上下文),在持久化上下文中维护实体的生命周期。主要包含三个方面的内容:
ORM元数据。JPA支持annotion或xml两种形式描述对象-关系映射。
实体操作API。实现对实体对象的CRUD操作。
查询语言。约定了面向对象的查询语言JPQL(Java Persistence Query Language)。


与Hibernate的比较
JPA的主要API都定义在javax.persistence包中。如果你熟悉Hibernate,可以很容易做出对应:
org.hibernate javax.persistence 说明
cfg.Configuration Persistence 读取配置信息
SessionFactory EntityManagerFactory 用于创建会话/实体管理器的工厂类
Session EntityManager 提供实体操作API,管理事务,创建查询
Transaction EntityTransaction 管理事务
Query Query 执行查询


二,实体生命周期
实体生命周期是JPA中非常重要的概念,描述了实体对象从创建到受控、从删除到游离的状态变换。对实体的操作主要就是改变实体的状态。

状态:
New,新创建的实体对象,没有主键(identity)值
Managed,对象处于Persistence Context(持久化上下文)中,被EntityManager管理
Detached,对象已经游离到Persistence Context之外,进入Application Domain
Removed, 实体对象被删除

EntityManager提供一系列的方法管理实体对象的生命周期,包括:
persist, 将新创建的或已删除的实体转变为Managed状态,数据存入数据库。
remove,删除受控实体
merge,将游离实体转变为Managed状态,数据存入数据库。

如果使用了事务管理,则事务的commit/rollback也会改变实体的状态。

三,实体关系映射(ORM)
3.1 基本映射
对象端 数据库端 annotion 可选annotion
Class Table @Entity @Table(name="tablename")
property column – @Column(name = "columnname")
property primary key @Id @GeneratedValue(strategy = GenerationType.XXX) 详见ID生成策略
property NONE @Transient

3.2 ID生成策略
ID对应数据库表的主键,是保证唯一性的重要属性。JPA提供了以下几种ID生成策略
GeneratorType.AUTO ,由JPA自动生成
GenerationType.IDENTITY,使用数据库的自增长字段,需要数据库的支持(如SQL Server、MySQL、DB2、Derby等)
GenerationType.SEQUENCE,使用数据库的序列号,需要数据库的支持(如Oracle)
GenerationType.TABLE,使用指定的数据库表记录ID的增长
需要定义一个TableGenerator:
@TableGenerator( name="myGenerator", table="GENERATORTABLE", pkColumnName = "ENTITYNAME", pkColumnValue="MyEntity", valueColumnName = "PKVALUE", allocationSize=1 )
在@GeneratedValue中引用即可
@GeneratedValue(strategy = GenerationType.TABLE,generator="myGenerator")

3.3 关联关系
JPA定义了one-to-one、one-to-many、many-to-one、many-to-many 4种关系。
对于数据库来说,通常在一个表中记录对另一个表的外键;
对应到实体对象,持有关联数据的一方称为owning-side,另一方称为inverse-side。




猜你喜欢

转载自hellobbboy.iteye.com/blog/2393846
今日推荐