知识大全 EJB之JPA(EntityManager)

Posted

篇首语:花门楼前见秋草,岂能贫贱相看老。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 EJB之JPA(EntityManager)相关的知识,希望对你有一定的参考价值。

EJB之JPA(EntityManager)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    基本概念        EntityManager称为实体管理器 它由EntityManagerFactory所创建 EntityManagerFactory 作为EntityManager的工厂 包含有当前O R映射的元数据信息 每个EntityManagerFactory 可称为一个持久化单元(PersistenceUnit) 每个持久化单元可认为是一个数据源的映射(所谓数据源 可理解为一个数据库 我们可以在应用服务器中配置多个数据源 同时使用不同的PersistenceUnit来映射这些数据源 从而能够很方便的实现跨越多个数据库之间的事务操作!)        PersistenceContext 称为持久化上下文 它一般包含有当前事务范围内的 被管理的实体对象(Entity)的数据 每个EntityManager 都会跟一个PersistenceContext相关联 PersistenceContext中存储的是实体对象的数据 而关系数据库中存储的是记录 EntityManager正是维护这种OR映射的中间者 它可以把数据从数据库中加载到PersistenceContext中 也可以把数据从PersistenceContext中持久化到数据库 EntityManager通过Persist merge remove refresh flush等操作来操纵PersistenceContext与数据库数据之间的同步!        EntityManager是应用程序操纵持久化数据的接口 它的作用与hibernate session类似 为了能够在一个请求周期中使用同一个session对象 在hibernate的解决方案中 提出了currentSession的概念 hibernate中的current session 可以跟JTA事务绑定 也可以跟当前线程绑定 在hibernate中 session管理著所有的持久化对象的数据 而在EJB 中 EntityManager管理著PersistenceContext PersistenceContext正是被管理的持久化对象的集合         在Java EE环境下 一个JTA事务通常会横跨多个组件的调用(比如多个EJB组件的方法调用) 这些组件需要能够在单个事务范围内访问到同样的Persistence Context 为了满足这种情况的需要 当EntityManager被注入或通过jndi被查询的时候 它的Persistence Context将会在当前事务范围内自动传播 引用到同一个Persistence unit的EntityManager将使用同样的Persistence Context 这可以避免在不同的组件之间传递EntityManager引用         通过容器来传递PersistenceContext 而不是应用程序自己来传递EntityManager 这种方式(由容器管理著PersistenceContext 并负责传递到不同的EntityManager)称为容器管理的实体管理器(Container Managed EntityManager) 它的生命周期由容器负责管理         有一种不常见的情况是 应用程序自身需要独立访问Persistence Context 即每次创建一个EntityManager都会迫使创建一个新的Persistence Context 这些Persistence Context即使在同一个事务范围内也不会跟其它EntityManager共享!这个创建过程可以由EntityManagerFactory的createEntityManager方法来创建 这被称为应用管理的实体管理器(application managed entity manager)         底层事务控制        EntityManager的底层可以使用JTA或RESOURCE_LOCAL类型的事务控制策略 JTA一般在容器环境中使用 而RESOURCE_LOCAL一般在J SE的环境下使用         比如 在J SE的环境下 由应用程序自身来创建EntityManagerFactory 并由EntityManagerFactory创建EntityManager 通过EntityManager getTransaction begin()方法来开启事务 mit()方法提交事务等等 这种方式就是RESOURCE_LOCAL的基本使用方法         最常用的就是在容器环境下使用 也就是使用JTA类型的EntityManager 这样 EntityManager的调用都是在一个外部的JTA事务环境下进行的         Container Managed EntityManager必须是JTA类型的EntityManager 而Application Managed EntityManager则既可以是JTA类型的EntityManager 也可以是RESOURCE_LOCAL类型的EntityManager         配置示例         <persistence unit name= test transaction type= JTA > cha138/Article/program/Java/hx/201311/27196

相关参考

知识大全 EJB之JPA(UUID与TABLE影射策略)

EJB之JPA(UUID与TABLE影射策略)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!UUI

知识大全 使用Eclipse开发JPA快速入门

使用Eclipse开发JPA快速入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Eclips

知识大全 Spring 2.5 中配置 JPA

Spring2.5中配置JPA  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文提供了一个简单

知识大全 学习JPA——Hibernate Annotation使用实例

学习JPA——HibernateAnnotation使用实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Spring+JPA+MySQL的配置文件

Spring+JPA+MySQL的配置文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一直在

知识大全 MyEclipse 6.0发布 整合JPA框架

MyEclipse6.0发布整合JPA框架  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Gen

知识大全 Eclipse整合JPA + Struts 2 +&nbs

Eclipse整合JPA+Struts2+&nbs  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Hibernate(jpa)复合主键annotation声明方法

Hibernate(jpa)复合主键annotation声明方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 JPA和hibernate对删除操作的不同[1]

JPA和hibernate对删除操作的不同[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 JPA和hibernate对删除操作的不同[3]

JPA和hibernate对删除操作的不同[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!