上述我们知道什么是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. Log4j 日志级别

    转自:http://michales003.iteye.com/blog/1160605 日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level).: 1.static ...

  2. [Linux] Linux smaps接口文件结构

    在Linux内核 2.6.16中引入了一个系统内存接口特性,这个接口位于/proc/$pid/目录下的smaps文件中 ,一看内容发现是进程内存映像信息,比同一目录下的maps文件更详细些. 400d ...

  3. win下idea远程提交WordCount任务到HA集群

    一,环境配置 1,修改win下的host文件:即C:\Windows\System32\drivers\etc\host中添加集群中机子的ip 2,win下hadoop,并为win的环境变量配置had ...

  4. Ubuntu14.04配置nginx开机自启动项

    原文: https://www.jianshu.com/p/2e03255cfabb ubuntu配置开机自动启动服务 ---------------------------------------- ...

  5. [TypeScript] Work with DOM Elements in TypeScript using Type Assertions

    The DOM can be a bit tricky when it comes to typing. You never really know exactly what you're going ...

  6. java nb

    Java领域有非常多著名的人物.他们为Java社区编写框架.产品.工具或撰写书籍改变了Java编程的方式. 本文是<最受欢迎的8位Java牛人>的2.0版本号. PS:排名不分先后.本文的 ...

  7. Java中常用的6种排序算法详细分解

    排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...

  8. Win7双屏显示设置

    双显示器:一个是T410自己的屏幕,一个是宏基的Acer1296*768显示器. 连接:将宏基显示器的Display端子连接到笔记本的Display口上,电源接上. 设置过程: 1.右键点屏幕,选“S ...

  9. 好用的Android屏幕适配

    前言 网上关于屏幕适配的文章已经铺天盖地了,为什么还要讲?因为网上现在基本都是使用px适配,即每种屏幕分辨率的设备需要定义一套dimens.xml文件.再加上有些手机还有虚拟按键(例如华为),这样就还 ...

  10. 算法笔记_050:硬币收集问题(Java)

    目录 1 问题描述 2 解决方案 2.1 动态规划法   1 问题描述 在n*m格木板中放有一些硬币,每格的硬币数目最多为一个,在木板左上方的一个机器人需要收集尽可能多的硬币并把它们带到右下方的单元格 ...