您现在的位置是:首页 >

responseentity乱码 EJB之JPA(EntityManager)

火烧 2022-07-03 05:24:16 1076
EJB之JPA E tityMa ager 基本概念 E tityMa ager称为实体管理器 它由E tityMa agerFactory所创建 E tityMa agerFactory 作为E t

EJB之JPA(EntityManager)  

responseentity乱码 EJB之JPA(EntityManager)
    基本概念        EntityManager称为实体管理器 它由EntityManagerFactory所创建 EntityManagerFactory 作为EntityManager的工厂 包含有当前O R映射的元数据信息 每个EntityManagerFactory 可称为一个持久化单元(PersistenceUnit) 每个持久化单元可认为是一个数据源的映射(所谓数据源 可理解为一个数据库 我们可以在应用服务器中配置多个数据源 同时使用不同的PersistenceUnit来映射这些数据源 从而能够很方便的实现跨越多个数据库之间的事务操作!)        PersistenceContext 称为持久化上下文 它一般包含有当前事务范围内的 被管理的实体对象(Entity)的数据 每个EntityManager 都会跟一个PersistenceContext相关联 PersistenceContext中存储的是实体对象的数据 而关系数据库中存储的是记录 EntityManager正是维护这种OR映射的中间者 它可以把数据从数据库中加载到PersistenceContext中 也可以把数据从PersistenceContext中持久化到数据库 EntityManager通过Persist merge remove refresh flush等操作来操纵PersistenceContext与数据库数据之间的同步!        EntityManager是应用程序操纵持久化数据的接口 它的作用与hibernate session类似 为了能够在一个请求周期中使用同一个session对象 在hibernate的解决方案中 提出了currentSession的概念 hibernate中的current session 可以跟JTA事务绑定 也可以跟当前线程绑定 在hibernate中 session管理著所有的持久化对象的数据 而在EJB 中 EntityManager管理著PersistenceContext PersistenceContext正是被管理的持久化对象的集合         在Java EE环境下 一个JTA事务通常会横跨多个组件的调用(比如多个EJB组件的方法调用) 这些组件需要能够在单个事务范围内访问到同样的Persistence Context 为了满足这种情况的需要 当EntityManager被注入或通过jndi被查询的时候 它的Persistence Context将会在当前事务范围内自动传播 引用到同一个Persistence unit的EntityManager将使用同样的Persistence Context 这可以避免在不同的组件之间传递EntityManager引用         通过容器来传递PersistenceContext 而不是应用程序自己来传递EntityManager 这种方式(由容器管理著PersistenceContext 并负责传递到不同的EntityManager)称为容器管理的实体管理器(Container Managed EntityManager) 它的生命周期由容器负责管理         有一种不常见的情况是 应用程序自身需要独立访问Persistence Context 即每次创建一个EntityManager都会迫使创建一个新的Persistence Context 这些Persistence Context即使在同一个事务范围内也不会跟其它EntityManager共享!这个创建过程可以由EntityManagerFactory的createEntityManager方法来创建 这被称为应用管理的实体管理器(application managed entity manager)         底层事务控制        EntityManager的底层可以使用JTA或RESOURCE_LOCAL类型的事务控制策略 JTA一般在容器环境中使用 而RESOURCE_LOCAL一般在J SE的环境下使用         比如 在J SE的环境下 由应用程序自身来创建EntityManagerFactory 并由EntityManagerFactory创建EntityManager 通过EntityManager getTransaction begin()方法来开启事务 mit()方法提交事务等等 这种方式就是RESOURCE_LOCAL的基本使用方法         最常用的就是在容器环境下使用 也就是使用JTA类型的EntityManager 这样 EntityManager的调用都是在一个外部的JTA事务环境下进行的         Container Managed EntityManager必须是JTA类型的EntityManager 而Application Managed EntityManager则既可以是JTA类型的EntityManager 也可以是RESOURCE_LOCAL类型的EntityManager         配置示例         <persistence unit name= test transaction type= JTA > lishixinzhi/Article/program/Java/hx/201311/27196  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码