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

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

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VubGlkdWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

在具体讲述获取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获取有些理解了吗?

JPA(二):EntityManager的更多相关文章

  1. JPA中entityManager的CRUD

    private EntityManagerFactory entityManagerFactory; private EntityManager entityManager; private Enti ...

  2. spingboot集成jpa(二)

     一.使用单元测试 单元测试在每个项目环境中必不可少,springboot中如何使用单元测试 在src/test/java中新建测试类DemoApplicationTest.java 项目结构: De ...

  3. JPA的entityManager的find、getReference、persisit、remove方法的使用

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  4. JPA的entityManager的find方法与getReference方法的区别

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  5. <Spring Data JPA>二 Spring Data Jpa

    1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  6. Spring Data Jpa (二)JPA基础查询

    介绍Spring Data Common里面的公用基本方法 (1)Spring Data Common的Repository Repository位于Spring Data Common的lib里面, ...

  7. jpa

    学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...

  8. Hibernate+JPA (EntityMange讲解)

    近年来ORM(Object-Relational Mapping)对象关系映射,即实体对象和数据库表的映射)技术市场人声音鼎沸,异常热闹, Sun在充分吸收现有的优秀ORM框架设计思想的基础上,制定了 ...

  9. JPA的泛型DAO设计及使用

    使用如Hibernate或者JPA作为持久化的解决方案时,设计一个泛型的DAO抽象父类可以方便各个实体的通用CRUD操作.由于此时大部分实体DAO的CRUD操作基本一样,采用泛型设计解决这个问题,带来 ...

  10. Hibernate+JPA

    参考链接:http://blog.163.com/hero_213/blog/static/398912142010312024809 近年来ORM(Object-Relational Mapping ...

随机推荐

  1. Kubernetes Pod日志太大导致空间问题

    在log-driver是json-file的模式下,容器的日志存放在/var/lib/docker/containers/下面,是以container_id-json.log文件存放 但缺省方式下,l ...

  2. python部署工具fabric

    两台机器:10.1.6.186.10.1.6.159.fabric部署在10.1.6.186上面 1  执行和1相同的任务,不过排除掉10.1.6.159这台机器 1 #!/usr/bin/pytho ...

  3. ylbtech-LanguageSamples-SimpleVariance

    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-SimpleVariance 1.A,示例(Sample) 返回顶部 SimpleVar ...

  4. [转]create a basic sql server 2005 trigger to send email alerts

    本文转自:http://blog.netnerds.net/2008/02/create-a-basic-sql-server-2005-trigger-to-send-e-mail-alerts/ ...

  5. delphi 调用 java

    1.设置JVM路径 FJavaVM := TJavaVM.Create(JNI_VERSION_1_6,     'C:\Program Files\Java\jre6\bin\server\jvm. ...

  6. xss学习教程

    XSS漏洞详细分析与讲解.rar xss黑白盒渗透测试.pdf xss基础钓鱼-shgcx.com.zip XSS利用教程-shgcx.com.zip xss盲打渗透网站.doc XSS挖掘.ppt  ...

  7. python中常用第三方库记录

    python中有很多很好用的第三方库,现在记录一下这些库以及如何下载 一.virtualenv,这是一个可以将生产环境隔离开的python库,非常好用 在linux下使用pip install vir ...

  8. less、sass、stylus

    less.sass.stylus 它们是三种类似的样式动态语言,属于css预处理语言,它们有类似css的语法,为css赋予了动态语言的特性.如变量.继承.运算.函数等.这么做是为了css的编写和维护. ...

  9. idea下一次Jar包依赖问题的解决过程

    项目导入后有几个类显示没找到依赖类. 第一步,定位到该类所在的jar包:pom文件没有报错,所以这应该是一个jar包版本问题,通过import路劲大概确定了jar包,我本地这个jar包一共有两个版本, ...

  10. sdut 3-7 类的友元函数的应用

    3-7 类的友元函数的应用 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 通过本题目的练习能够掌握类的友元函数的定义和使用方法 要求设计一个点类Poin ...