JPA基本概念和持久化的概念.doc
《JPA基本概念和持久化的概念.doc》由会员分享,可在线阅读,更多相关《JPA基本概念和持久化的概念.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、EntityManager1基本概念2底层事务控制3Container-Managed Persistence Context3Application-Managed Persistence Context4实体对象的生命周期4EntityManager的接口方法4实体对象的监听器和回调方法5拦截器6EntityManager实例操作介绍7EJB3如何实现继承关系的映射?7如何注入EntityManager对象?8如何知道有哪些实体类?或哪些实体类将要被映射到数据库表?8如何由应用程序来管理EntityManager?9如何利用JTA实现跨越多个数据库的事务控制(一)?9如何利用JTA实现跨越
2、多个数据库的事务控制(二)?12在声明式事务管理中,如何控制事务的回滚?14如何定义事务的传播特性?15如何监听实体对象的调用?15如何拦截session bean的方法调用?16EntityManager基本概念EntityManager称为实体管理器,它由EntityManagerFactory所创建。EntityManagerFactory,作为EntityManager的工厂,包含有当前O-R映射的元数据信息,每个EntityManagerFactory,可称为一个持久化单元(PersistenceUnit),每个持久化单元可认为是一个数据源的映射(所谓数据源,可理解为一个数据库,我们
3、可以在应用服务器中配置多个数据源,同时使用不同的PersistenceUnit来映射这些数据源,从而能够很方便的实现跨越多个数据库之间的事务操作!)PersistenceContext,称为持久化上下文,它一般包含有当前事务范围内的,被管理的实体对象(Entity)的数据。每个EntityManager,都会跟一个PersistenceContext相关联。PersistenceContext中存储的是实体对象的数据,而关系数据库中存储的是记录,EntityManager正是维护这种OR映射的中间者,它可以把数据从数据库中加载到PersistenceContext中,也可以把数据从Persis
4、tenceContext中持久化到数据库,EntityManager通过Persist、merge、remove、refresh、flush等操作来操纵PersistenceContext与数据库数据之间的同步!EntityManager是应用程序操纵持久化数据的接口。它的作用与hibernate session类似。为了能够在一个请求周期中使用同一个session对象,在hibernate的解决方案中,提出了currentSession的概念,hibernate中的current session,可以跟JTA事务绑定,也可以跟当前线程绑定。在hibernate中,session管理着所有的持
5、久化对象的数据。而在EJB3中,EntityManager管理着PersistenceContext,PersistenceContext正是被管理的持久化对象的集合。在Java EE环境下,一个JTA事务通常会横跨多个组件的调用(比如多个EJB组件的方法调用)。这些组件需要能够在单个事务范围内访问到同样的Persistence Context。为了满足这种情况的需要,当EntityManager被注入或通过jndi被查询的时候,它的Persistence Context将会在当前事务范围内自动传播,引用到同一个Persistence unit的EntityManager将使用同样的Persi
6、stence Context。这可以避免在不同的组件之间传递EntityManager引用。通过容器来传递PersistenceContext,而不是应用程序自己来传递EntityManager。这种方式(由容器管理着PersistenceContext,并负责传递到不同的EntityManager)称为容器管理的实体管理器(Container-Managed EntityManager),它的生命周期由容器负责管理。有一种不常见的情况是,应用程序自身需要独立访问Persistence Context。即每次创建一个EntityManager都会迫使创建一个新的Persistence Cont
7、ext。这些Persistence Context即使在同一个事务范围内也不会跟其它EntityManager共享!这个创建过程可以由EntityManagerFactory的createEntityManager方法来创建。这被称为应用管理的实体管理器(application-managed entity manager)。底层事务控制EntityManager的底层可以使用JTA或RESOURCE_LOCAL类型的事务控制策略。JTA一般在容器环境中使用,而RESOURCE_LOCAL一般在J2SE的环境下使用。比如,在J2SE的环境下,由应用程序自身来创建EntityManagerFac
8、tory,并由EntityManagerFactory创建EntityManager,通过EntityManager.getTransaction.begin()方法来开启事务,commit()方法提交事务等等,这种方式就是RESOURCE_LOCAL的基本使用方法。最常用的就是在容器环境下使用。也就是使用JTA类型的EntityManager,这样,EntityManager的调用都是在一个外部的JTA事务环境下进行的。Container-Managed EntityManager必须是JTA类型的EntityManager,而Application-Managed EntityManage
9、r则既可以是JTA类型的EntityManager,也可以是RESOURCE_LOCAL类型的EntityManager。配置示例:Container-Managed Persistence ContextPersistenceContext(unitName=test)private EntityManager em;persistence context的生命周期对应用程序来说,总是被自动、透明的管理着的。也就是对应用程序本身来说,它对persitence context的创建、销毁一无所知,完全自动和透明。Persistence context随着JTA事务而传播。一个容器管理的pers
10、istence context (即container-managed persistence context)可以被限定为单个事务范围,或,扩展其生存期跨越多个事务!这取决于当它的entity manager被创建的时候所定义的PersistenceContextType类型。它可以取值为TRANSACTION和EXTENDED。可称为:事务范围的persistence context或扩展的persistence context。Persistence context总是会关联到一个entity manager factory。- Transaction-scope persistence
11、 context当entity manager的方法被调用的时候,如果在当前JTA事务中还没有persistence context,那么将启动一个新的persistence context ,并将它跟当前的JTA事务关联。- Extended persistence context扩展的persistence context 总是跟stateful session bean绑定在一起。当在stateful session bean中注入entity manager,并定义为extended persistence context时,从我们开始调用stateful session bean开始
12、,直到stateful session bean被销毁(移除)!通常,这可以通过调用一个在stateful session bean中被注解定义为Remove的方法来结束一个stateful session bean的生命周期。Application-Managed Persistence Context即当我们自己创建EntityManager的时候,我们通过entityManager.close() / isOpen()方法来管理entityManager及其对应的persistence context.实体对象的生命周期几种类型:New,managed,detached,removedN
13、ew 即未有id值,尚未跟persistence context建立关联的对象Managed 有id值,已跟persistence context建立了关联Detached 有id值,但没有(或不再)跟persistence context建立关联Removed 有id值,而且跟persistence context尚有关联,但已准备好要从数据库中把它删除。EntityManager的接口方法添加:调用persist方法* 将把一个对象持久化,如果对象的ID非空,则在调用persist方法时将抛出异常,无法持久化删除:remove方法不能直接new一个对象,然后给它的id赋值,然后删除。要删除
14、一个对象,这个对象必须是处于持久化状态。更新:merge方法Find 查找某个对象,如果查不到该对象,将返回null,相当于getgetReference 查找某个对象,如果查找不到该对象,将抛出异常,相当于loadflush 将实体对象由persistence context同步到底层的数据库l FlushModen Auto 即在同一个事务中,在查询发生前,将自动把数据从PersistenceContext持久化到数据库中。n Commit 只在提交的时候,把数据从PersistenceContext中持久化到数据库中。如果设置FlushMode为commit,那么在同一个事务中,在查询之
15、前,如果有更新的数据,这些数据是否会影响到查询的结果,这种情况,EJB3未作说明。Lock 锁定某个实体对象实际上就是定义事务的隔离级别。总共有两种形式:READ和WRITE,表示:不管是READ还是WRITE,都应该能够避免脏读(读到另外一个事务未提交的数据)和不可重复读(同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。)而对于WRITE来说,还应该能够强迫版本号的增加(对那些标识了版本的对象而言)。因此,其它事务无法对其做任何更改操作!Refresh 将数据从数据库中加载到Persistenc Context。Clear 清除Pers
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JPA 基本概念 持久 概念
限制150内