JPA(二):EntityManager
上述我们知道什么是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的更多相关文章
- JPA中entityManager的CRUD
private EntityManagerFactory entityManagerFactory; private EntityManager entityManager; private Enti ...
- spingboot集成jpa(二)
一.使用单元测试 单元测试在每个项目环境中必不可少,springboot中如何使用单元测试 在src/test/java中新建测试类DemoApplicationTest.java 项目结构: De ...
- JPA的entityManager的find、getReference、persisit、remove方法的使用
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- JPA的entityManager的find方法与getReference方法的区别
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- <Spring Data JPA>二 Spring Data Jpa
1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Spring Data Jpa (二)JPA基础查询
介绍Spring Data Common里面的公用基本方法 (1)Spring Data Common的Repository Repository位于Spring Data Common的lib里面, ...
- jpa
学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...
- Hibernate+JPA (EntityMange讲解)
近年来ORM(Object-Relational Mapping)对象关系映射,即实体对象和数据库表的映射)技术市场人声音鼎沸,异常热闹, Sun在充分吸收现有的优秀ORM框架设计思想的基础上,制定了 ...
- JPA的泛型DAO设计及使用
使用如Hibernate或者JPA作为持久化的解决方案时,设计一个泛型的DAO抽象父类可以方便各个实体的通用CRUD操作.由于此时大部分实体DAO的CRUD操作基本一样,采用泛型设计解决这个问题,带来 ...
- Hibernate+JPA
参考链接:http://blog.163.com/hero_213/blog/static/398912142010312024809 近年来ORM(Object-Relational Mapping ...
随机推荐
- JavaScript基础入门教程(三)
说明 前面的两篇博客介绍了js中的基本知识中的变量类型.标识符等.这篇博客主要谈表达式以及运算符. 原始表达式 原始表达式就是表达式中最小的,不能在分割的表达式,一般指变量.常数直接量.关键字(tru ...
- Ubuntu下Wine使用教程
转自:http://blog.csdn.net/wangchangshuai0010/article/details/12057251 用了段时间的Ubuntu,感觉很好!可是工作的时候还是要用到 w ...
- iOS: 复选框使用---第三方框架SSCheckBoxView-master
在iOS开发中对应用程序进行设置时一般都用UISwitch,偶尔显得单调,这时候你可以选择使用第三方开源类库SSCheckBoxView . SSCheckBoxView是一个可用在iOS上一个复选框 ...
- Android OpenGL加入光照和材料属性
转载请注明出处:[huachao1001的专栏:http://blog.csdn.net/huachao1001] 在上一篇文章[ Android OpenGL显示随意3D模型文件 ]中.我们学习了怎 ...
- [CF 276C]Little Girl and Maximum Sum[差分数列]
题意: 给出n项的数列A[ ], q个询问, 询问 [ l, r ] 之间项的和. 求A的全排列中该和的最大值. 思路: 记录所有询问, 利用差分数列qd[ ], 标记第 i 项被询问的次数( 每次区 ...
- mysql多实例介绍及配置
mysql多实例介绍及配置 1.mysql多实例介绍 1.1 什么是mysql多实例 mysql多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过 ...
- Java中常用的6种排序算法详细分解
排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...
- Rails 枚举
Rails Model中使用枚举有两种方案,一种是rails内置的enum,一种使用enumerize这个gem,不管哪种都能达到相同的目的. 首先介绍第一种: 一. enum 基本使用方法,以一个案 ...
- XP如何找到网上邻居
右击桌面,点击属性,切换到桌面,自定义桌面,勾选网上邻居即可.
- Mach-O文件格式和程序从载入到运行过程
> 之前深入了解过.过去了一年多的时间.如今花些时间好好总结下,毕竟好记性不如烂笔头. 其次另一个目的,对于mach-o文件结构.关于动态载入信息那个数据区中,命令含义没有深刻掰扯清除,希望有同 ...