内容来源于阅读
JPA 2.0
规范、
Apache
OpenJPA
相关文档、
Seam in Action
后的总结。
1.
四大要素
:
- Entities
(
Persistence Contexts(
状态缓存
)
)
- Persistence (
整个
persistence.xml
,包含多个
unit
,每个
unit
对应一个
EntityManagerFactory)
- EntityManager
(
EntityManagerFactory
创建)
- Transactions(JTA
or Resource-Local)
2.
四大要素关系用图表示如下:

Persistence :
包含创建
EntityManagerFactory
的静态方法及整个
persistence.xml
配置文件信息。
EntityManagerFactory
:
由
Persistence
创建,对应
Persistence
中的一个
unit
。其创建过程比较费资源,一般整个应用程序只创建一次。
EntityManagerFactory
的主要职责是创建
EntityManager
。
EntityManager
:由
EntityManagerFactory
编程创建或由容器创建,在容器外使用时会对应一个
EntityTraction
(
em.getTransaction
)。与
PersistenceContext
的对应关系看
PC
部分。
EntityManager
的职责包括:
Transaction
association
,
Entity lifecycle
management
(实质上
PC
管理),
Entity identity management
(实质上
PC
管理),
Cache management
(实质上
PC
管理),
Query factory
,
Closing(
释放资源
)
。
EntityManager
生命周期:如果是
container-managed
,则由容器控制,如果是
applaction-managed
则由应用程序控制(所有
j2se
和某些特殊的
javaee
环境中)。
PersistenceContext
(
PC
):
分为两种,
transaction
和
extended. PC
职责:管理实体状态。
Transaction
类型的
PC
在
EntityManager
开始事务时创建,结束事务或事务回滚时关闭,而
Extend PC
可以跨多个事务或非事务。
PC
类型如果是
Transaction
,则
EntityManager
会根据需要创建
PC
,一般情况发生在事务开始时,在事务外调用
EntityManager
的方法也会创建一个临时的
PC
,方法调用结束就删除
PC
。
PC
类型如果是
extended, EntityManager
的整个生命周期只与一个
PC
关联,
EntityManager
生命周期的结束也意味着
PC
生命周期的结束。
PC
生命周期:已经在上面说明,
PC
生命一旦结束,所以其关联的
Entities
都变为
detached.
注意
Container-managed PC
可以是
transaction OR extended
,而
Application-managed PC
(
EntityManager
是程序通过
EntityManagerFactory
创建的)必定是
extended.
为了便于
Persistence Context
在多个
Javaee
组件间共享,
Jave ee
提供了
Persistence
Context Propagation
,这样就没有必要传递
EntityManager
了。
PC
传递有多种限制请看:
http://weblogs.java.net/blog/ss141213/archive/2006/10/persistence_con.html
PersistenceContext
示例:
(http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/jpa_overview_emfactory_perscontext.html
)
(
1
)
Transaction PC
EntityManager
em; // injected
...
// outside a
transaction:
// each
operation occurs in a separate persistence context, and returns
// a new
detached instance
(下次使用时需要
merge
一下就行了)
Magazine mag1
= em.find(Magazine.class, magId);
Magazine mag2
= em.find(Magazine.class, magId);
assertTrue(mag2
!= mag1);
...
// transaction
begins:
// within a
transaction, a subsequent lookup doesn't return any of the
// detached
objects. however, two lookups within the same transaction
// return the
same instance, because the persistence context spans the
// transaction
Magazine mag3
= em.find(Magazine.class, magId);
assertTrue(mag3
!= mag1 && mag3 != mag2);
Magazine mag4
= em.find(Magazine.class (magId);
assertTrue(mag4
== mag3);
...
// transaction
commits:
// once again,
each operation returns a new instance
Magazine mag5
= em.find(Magazine.class, magId);
assertTrue(mag5
!= mag3);
(
2
)
Extended PC
EntityManagerFactory
emf = ...
EntityManager
em = emf.createEntityManager();
// persistence
context active for entire life of EM, so only one entity
// for a given
persistent identity
Magazine mag1
= em.find(Magazine.class, magId);
Magazine mag2
= em.find(Magazine.class, magId);
assertTrue(mag2
== mag1);
em.getTransaction().begin();
// same
persistence context active within the transaction
Magazine mag3
= em.find(Magazine.class, magId);
assertTrue(mag3
== mag1);
Magazine mag4
= em.find(Magazine.class (magId);
assertTrue(mag4
== mag1);
em.getTransaction.commit
();
// when the
transaction commits, instance still managed
Magazine mag5
= em.find(Magazine.class, magId);
assertTrue(mag5
== mag1);
// instance
finally becomes detached when EM closes
em.close();
Entities
:JPA
中实体包含多种状态,这些状态由
PersistenceContext
进行管理。
Transactions
:
事务的控制通过
JTA
或
r
esource-local
EntityTransaction
API
实现
,
EntityManager
对事物的操纵最终映射到
JTA
或
Resource-local
Entity Transaction API
。一个
EntityManager
如果它的事务是由
JTA
控制,叫做
JTA EntityManager
,反之如果是通过
Resource-local Entity Transaction API
控制,叫做
Resource-local EntityManager
。
J2se
只支持
Resource-local
类型的事务。
3.
小结:
JPA
主要有上面提到的四大要素构成,它们相互协作共同完成
OR Maping
。四大要素中最核心的概念是
PersistenceContext
,
EntityManager
通过与其交互完成对实体的
CRUD
。
PersistenceContext
有两种类型,它的类型决定了其生命周期及
EntityManager
在何时获取销毁它。
Application-managed PC
必然是
Extended
,而
Contained-managedPC
可以是任何一种。
EntityManager
根据事务类型分为
JTA OR Resource-local
两种,
java se
只支持
Resourcelocal
类型。最后因
EntityManageFactory
的创建是非常耗资源的,所以一般在整个应用中只创建一次。

- 大小: 42.9 KB
分享到:
相关推荐
### JPA与Hibernate的关系 #### 一、JPA概述 **Java Persistence API (JPA)** 是一种用于管理Java应用中的关系型数据库的标准API。它的主要目的是为了提供一套统一的、可移植的对象-关系映射(ORM)解决方案。JPA...
### JPA映射关系详解 Java Persistence API (JPA) 是一种用于管理关系型数据库中的数据的标准 Java 技术。JPA 提供了一种对象关系映射 (ORM) 方法来处理数据库,允许开发者以面向对象的方式操作数据库。本文将详细...
JPA映射关系,多种映射关系的图解,适合EJB初学者,对JPA映射关系的了解.
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它是ORM(对象关系映射)框架的一种实现,允许开发者使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。JPA通过...
在Java Persistence API (JPA) 中,实体映射关系是数据库关系模型与Java对象模型之间的桥梁,用于在ORM(对象关系映射)框架下管理数据。JPA 提供了多种映射关系,使得开发者能够方便地处理不同类型的关联。下面我们...
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了一种方式,让开发者可以用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。JPA允许你在...
在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库的框架,它使得对象-关系映射(ORM)更加便捷。本实例将详细探讨JPA中的一对一(OneToOne)关系配置,以及如何在实际项目中实现。 一对一关系在...
在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库的框架,它提供了对象-关系映射(ORM)的功能,使得开发者可以使用面向对象的方式来操作数据库。本篇文章将深入探讨如何在JPA中实现继承关系,这...
在JPA中,实体Bean之间的关系映射是核心概念之一,它帮助我们定义不同对象之间的关联,以便在数据库中进行数据操作。以下是JPA的7种关系的详细解释: 1. 一对一单向(OneToOne Unidirectional): 这种关系意味着...
**JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中存储、检索和管理对象的工作。JPA是Java EE和Java SE环境中的一种ORM(Object-Relational Mapping)...
在Java世界中,Java Persistence API(JPA)是用于对象关系映射(ORM)的一种标准规范,它使得Java开发者能够以面向对象的方式处理数据库操作。本教程“11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护”聚焦于...
### JPA应用及介绍 #### 1. JPA概述 ##### 1.1 什么是JPA? JPA,即Java Persistence API(Java持久化API),是Sun公司在Java EE 5规范中提出的一种Java持久化接口。JPA的目标是提供一种标准化的方式,用于简化...
jpa映射关系详解[参照].pdf
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它是ORM(对象关系映射)框架的一种实现,允许开发者使用Java对象来操作数据库,而无需编写大量的SQL代码。在JPA中,关系...
标题与描述均提到了“JPA”,这指向的是Java Persistence API(Java持久化API),一个用于Java应用中的对象-关系映射(ORM)的标准。JPA允许开发人员将数据库表映射到Java对象,从而在应用程序中以面向对象的方式...
通过学习和理解这些JPA实现及其批注,开发者可以有效地利用JPA来简化数据库操作,提高代码的可读性和可维护性,减少数据库相关的耦合。在实际开发中,根据项目的具体需求,可以选择适合的JPA实现,例如,对于性能...
JPA是一种用于管理关系型数据库中数据的Java对象的规范,它提供了将对象映射到数据库表、执行查询、处理事务等的功能。本书由JPA规范的主要领导者Linda DeMichiel作序,确保了其内容的权威性和准确性。 ### JPA2的...
在Java Persistence API (JPA) 中,映射关联关系是数据模型设计的重要组成部分。JPA 提供了多种方式来处理不同类型的关联关系,包括单向多对一、单向一对多、双向一对一、双向多对一和双向多对多。下面我们将详细...