zoukankan      html  css  js  c++  java
  • JPA(二):EntityManager

          上述我们知道什么是JPA了,接下来这篇文章就主要为大家介绍JPA的一个重要内容:EntityManager。不论什么对实体的操作都是通过它来完毕的。

          先来说说什么是EntityManager。顾名思义。EntityManager是负责管理Entity的对象。它是Java实体对象与数据库交互的中介,它负责管理一组相应的实体。包含这组实体的CRUD操作等。

    同一时候。EntityManager也就是实体管理器也负责与持久化上下文进行交互,能够实现对实体不同状态进行转换操作等。

          通过一张图,来看一下更加生动形象的看一下EntityManager的作用吧。


          知道什么时候实体管理器了,那么实体管理器从哪里来呢?也就是我们怎样创建实体管理器呢?

          在具体讲述获取EntityManager对象之前,读者首先要分清楚两个概念,即JavaEE环境与J2SE环境。

    一 、 Java EE环境。包含EJB容器和Web容器。 

          (1)Web容器:仅仅执行Web应用的容器。比如Tomcat就是开源的Web容器,它能够执行JSP、Servlet等。 

          (2)EJB容器:执行在EJB组件的容器,提供EJB组件的状态管理、事务管理、线程管理、远程数据资源訪问、连接管理和安全性管理等系统级服务。比如JBoss为EJB容器和Web容器(Web容器是集成了Tomcat)结合。

     

          部署在EJB容器中的JAR包都能够觉得是执行在EJB容器中。但JBoss中的Web应用。比方war包中的类就不是执行在EJB容器中。而是执行在Web容器中。 

    二、 J2SE环境 

          最普通Java执行环境,比如一个HelloWorld的Java程序就是执行在J2SE的环境中,通常使用main入口方法作为程序启动的触发。

     

          下图就是JavaEE与J2SE环境的关系示意图:

     


          我们依据EntityManager对象的管理方式,能够有下面两种类型的EntityManager。

    一、  容器托管的(container-managed)EntityManager对象

          容器托管的EntityManager对象最简单。程序猿不须要考虑EntityManager连接的释放。以及事务等复杂的问题。全部这些都交给容器去管理。容器托管的EntityManager对象必须在EJB容器中执行,而不能在Web容器和J2SE的环境中执行。通过注入@PersistenceContext凝视来获得 EntityManager对象,事实上。这样的获得EntityManager对象的方式就是容器托管的。

     

    二、 应用托管的(application-managed)EntityManager对象

          应用托管的EntityManager对象。程序猿须要手动地控制它的释放和连接、手动地控制事务等。但这样的获得应用托管的EntityManager对象的方式,不仅能够在EJB容器中应用,也能够使JPA脱离EJB容器,而与不论什么的Java环境集成,比方说Web容器、J2SE环境等。所以从某种角度上来说,这样的方式是JPA能够独立于EJB环境运 行的基础。

          理想状态下。最好是选用容器托管的EntityManager对象的方式,但在特殊的环境下。还是须要使用应用托管的EntityManager对象这样的方式。

    正是由于应用托管的EntityManager对象的连接释放、事务控制比較复杂,所以在使用时涉及的相关内容比較多。

     

          两种不同的获取EntityManager方式,事实上原理还是一致的。归根究竟它都是由EntityManagerFactory所创建。仅仅只是是在由容器托管的EntityManager中,容器替我们创建了EntityManagerFactory;可是由应用托管的EntityManager中,我们须要手动创建EntityManagerFactory。

          作为EntityManager的工厂,EntityManagerFactory包括有当前O-R映射的元数据信息。每一个EntityManagerFactory,可称为一个持久化单元(PersistenceUnit)。每一个持久化单元可觉得是一个数据源的映射(所谓数据源,可理解为一个数据库,我们可以在应用server中配置多个数据源,同一时候使用不同的PersistenceUnit来映射这些数据源,从而可以非常方便的实现跨越多个数据库之间的事务操作!)


          说道这里,不知道读者朋友对于JPA中的EntityManager获取有些理解了吗?


  • 相关阅读:
    < java.util >-- Set接口
    Codeforces 627 A. XOR Equation (数学)
    Codeforces 161 B. Discounts (贪心)
    Codeforces 161 D. Distance in Tree (树dp)
    HDU 5534 Partial Tree (完全背包变形)
    HDU 5927 Auxiliary Set (dfs)
    Codeforces 27E. Number With The Given Amount Of Divisors (暴力)
    lght oj 1257
    Codeforces 219D. Choosing Capital for Treeland (树dp)
    Codeforces 479E. Riding in a Lift (dp + 前缀和优化)
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6781221.html
Copyright © 2011-2022 走看看