`

JPA四大要素及其关系

阅读更多

 

内容来源于阅读 JPA 2.0 规范、 Apache OpenJPA 相关文档、 Seam in Action 后的总结。

1. 四大要素

  1. Entities Persistence Contexts( 状态缓存 )
  2. Persistence ( 整个 persistence.xml ,包含多个 unit ,每个 unit 对应一个 EntityManagerFactory)
  3. EntityManager EntityManagerFactory 创建)
  4. 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 EntityTransac­tion 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
0
0
分享到:
评论

相关推荐

    JPA和Hibernate的关系

    ### JPA与Hibernate的关系 #### 一、JPA概述 **Java Persistence API (JPA)** 是一种用于管理Java应用中的关系型数据库的标准API。它的主要目的是为了提供一套统一的、可移植的对象-关系映射(ORM)解决方案。JPA...

    JPA映射关系详解javax JPA JPA映射关系 JPA映射

    ### JPA映射关系详解 Java Persistence API (JPA) 是一种用于管理关系型数据库中的数据的标准 Java 技术。JPA 提供了一种对象关系映射 (ORM) 方法来处理数据库,允许开发者以面向对象的方式操作数据库。本文将详细...

    JPA映射关系,多种映射关系的图解

    JPA映射关系,多种映射关系的图解,适合EJB初学者,对JPA映射关系的了解.

    JPA常用关系实现例子

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它是ORM(对象关系映射)框架的一种实现,允许开发者使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。JPA通过...

    jpa的实体映射关系7种

    在Java Persistence API (JPA) 中,实体映射关系是数据库关系模型与Java对象模型之间的桥梁,用于在ORM(对象关系映射)框架下管理数据。JPA 提供了多种映射关系,使得开发者能够方便地处理不同类型的关联。下面我们...

    jpa例子jpajpa

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了一种方式,让开发者可以用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。JPA允许你在...

    JPA一对一关系实例配置

    在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库的框架,它使得对象-关系映射(ORM)更加便捷。本实例将详细探讨JPA中的一对一(OneToOne)关系配置,以及如何在实际项目中实现。 一对一关系在...

    JPA 实现继承关系

    在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库的框架,它提供了对象-关系映射(ORM)的功能,使得开发者可以使用面向对象的方式来操作数据库。本篇文章将深入探讨如何在JPA中实现继承关系,这...

    JPA的7种关系详细讲解

    在JPA中,实体Bean之间的关系映射是核心概念之一,它帮助我们定义不同对象之间的关联,以便在数据库中进行数据操作。以下是JPA的7种关系的详细解释: 1. 一对一单向(OneToOne Unidirectional): 这种关系意味着...

    JPA源文件/jpa学习

    **JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中存储、检索和管理对象的工作。JPA是Java EE和Java SE环境中的一种ORM(Object-Relational Mapping)...

    11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护

    在Java世界中,Java Persistence API(JPA)是用于对象关系映射(ORM)的一种标准规范,它使得Java开发者能够以面向对象的方式处理数据库操作。本教程“11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护”聚焦于...

    jpa应用及介绍

    ### JPA应用及介绍 #### 1. JPA概述 ##### 1.1 什么是JPA? JPA,即Java Persistence API(Java持久化API),是Sun公司在Java EE 5规范中提出的一种Java持久化接口。JPA的目标是提供一种标准化的方式,用于简化...

    jpa映射关系详解[参照].pdf

    jpa映射关系详解[参照].pdf

    JPA一对一,一对多,多对多关系映射

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它是ORM(对象关系映射)框架的一种实现,允许开发者使用Java对象来操作数据库,而无需编写大量的SQL代码。在JPA中,关系...

    JPA

    标题与描述均提到了“JPA”,这指向的是Java Persistence API(Java持久化API),一个用于Java应用中的对象-关系映射(ORM)的标准。JPA允许开发人员将数据库表映射到Java对象,从而在应用程序中以面向对象的方式...

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    通过学习和理解这些JPA实现及其批注,开发者可以有效地利用JPA来简化数据库操作,提高代码的可读性和可维护性,减少数据库相关的耦合。在实际开发中,根据项目的具体需求,可以选择适合的JPA实现,例如,对于性能...

    Pro JPA2 精通JPA2

    JPA是一种用于管理关系型数据库中数据的Java对象的规范,它提供了将对象映射到数据库表、执行查询、处理事务等的功能。本书由JPA规范的主要领导者Linda DeMichiel作序,确保了其内容的权威性和准确性。 ### JPA2的...

    JPA-4 映射关联关系

    在Java Persistence API (JPA) 中,映射关联关系是数据模型设计的重要组成部分。JPA 提供了多种方式来处理不同类型的关联关系,包括单向多对一、单向一对多、双向一对一、双向多对一和双向多对多。下面我们将详细...

Global site tag (gtag.js) - Google Analytics