`
农村哥们
  • 浏览: 292735 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
JPA的体系结构
JPA 体系架构

JPA 中定义一套类和接口用于实现持久化管理和对象/关系的映射,下面这张图中显示了 JPA 的主要组件以及它们之间的相互关系。
图1 JPA 主要组件和相互关系



EntityManagerFactory
EntityManagerFactory 是 EntityManager 的工厂类,负责创建 EntityManager 对象。

EntityManager
EntityManager 是 JPA 应用中使用的基本对象,通过它提供的相应方法可以管理持久化对象,也可以新建或者删除持久化对象。EntityManager 还负责创建 Query 实例。在容器外使用时,EntityManagerFactory 和 EntityManager 之间是一对一的关系。

Entity
EntityTransaction 提供 Entity 操作时需要的事务管理,和 EntityManager 是一对一的关系。在查询操作时不需要使用 EntityTransaction,而在对象持久化、状态更新、对象删除等情况下则必须使用显式的使用 EntityTransaction 的相关方法管理事务。

Query
Query 是查询实体的接口,Query 对象可以从 EntityManager 中获得。根据 EJB 3.0 规范中的描述,Query 接口需要同时支持 JPQL 和原生态 SQL 两种语法。

Persistence
Persistence 是一个工具类,负责根据配置文件提供的参数创建 EntityManagerFactory 对象。

JPA 的优势

JPA 标准制定过程中充分吸收了目前已经出现的所有持久化技术的所有优点,摒弃了它们存在的局限,使 JPA 在简单易用、查询能力等方面表现突出。

标准化

JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问 API,这保证了基于 JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。

对容器级特性的支持

JPA 框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

简单易用,集成方便

JPA 的主要目标之一就是提供更加简单的编程模型:在 JPA 框架下创建实体和创建 Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity 进行注释;JPA 的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。JPA 基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。

可媲美 JDBC 的查询能力

JPA 定义了独特的 JPQL(Java Persistence Query Language),JPQL 是 EJB QL 的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

支持面向对象的高级特性

JPA 中能够支持面向对象的高级特性,比如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

下面的这个表格中列出了当前常用持久化技术的优缺点。

表 1 持久化技术的优缺点
支持内容:  序列化  JDBC  ORM  ODB  EJB 2.X  JDO  EJB 3 (JPA) 
Java 对象  Yes  No  Yes  Yes  Yes  Yes  Yes 
高级 OO 原理  Yes  No  Yes  Yes  No  Yes  Yes 
事务完整性  No  Yes  Yes  Yes  Yes  Yes  Yes 
并发  No  Yes  Yes  Yes  Yes  Yes  Yes 
大数据集  No  Yes  Yes  Yes  Yes  Yes  Yes 
现有 Schema  No  Yes  Yes  No  Yes  Yes  Yes 
关系型和非关系型数据存储  No  No  No  No  Yes  Yes  No 
查询  No  Yes  Yes  Yes  Yes  Yes  Yes 
严格的标准 / 可移植  Yes  No  No  No  Yes  Yes  Yes 
简单易用  Yes  Yes  Yes  Yes  No  Yes  Yes



OpenJPA 简介

OpenJPA 是 Apache 组织提供的开源项目,它实现了 EJB 3.0 中的 JPA 标准,为开发者提供功能强大、使用简单的持久化数据管理框架。OpenJPA 封装了和关系型数据库交互的操作,让开发者把注意力集中在编写业务逻辑上。OpenJPA 可以作为独立的持久层框架发挥作用,也可以轻松的与其它 Java EE 应用框架或者符合 EJB 3.0 标准的容器集成。

除了对 JPA 标准的支持之外,OpenJPA 还提供了非常多的特性和工具支持让企业应用开发变得更加简单,减少开发者的工作量,包括允许数据远程传输/离线处理、数据库/对象视图统一工具、使用缓存(Cache)提升企业应用效率等。

数据远程传输 / 离线处理

JPA 标准规定的运行环境是 "本地" 和 "在线" 的。本地是指 JPA 应用中的 EntityManager 必须直接连接到指定的数据库,而且必须和使用它的代码在同一个 JVM 中。在线是指所有针对实体的操作必须在一个 EntityManager 范围中运行。这两个特征,加上 EntityManager 是非序列化的,无法在网络上传输,导致 JPA 应用无法适用于企业应用中的 C/S 实现模式。OpenJPA 扩展了这部分接口,支持数据的远程传输和离线处理。

数据库 / 对象视图统一工具

使用 OpenJPA 开发企业应用时,保持数据库和对象视图的一致性是非常重要的工作,OpenJPA 支持三种模式处理数据库和对象视图的一致性:正向映射(Forward Mapping)、反向映射(Reverse Mapping)、中间匹配(Meet-in-the-Middle Mapping),并且为它们提供了相应的工具支持。

正向映射 是指使用 OpenJPA 框架中提供的 org.apache.openjpa.jdbc.meta.MappingTool 工具从开发者提供的实体以及在实体中提供的对象 / 关系映射注释生成相应的数据库表。


反向映射 是指 OpenJPA 框架中提供的 org.apache.openjpa.jdbc.meta.ReverseMappingTool 工具从数据库表生成符合 JPA 标准要求的实体以及相应的对象 / 关系映射注释内容。


中间匹配 是指开发者负责创建数据库表、符合 JPA 标准的实体和相应的对象 / 关系映射注释内容,使用 OpenJPA 框架中提供的 org.apache.openjpa.jdbc.meta.MappingTool 工具校验二者的一致性。


使用缓存提升效率

性能是企业应用重点关注的内容之一,缓存是提升企业系统性能的重要手段之一。OpenJPA 针对数据持久化提供多种层次、多方面的缓存支持,包括数据、查询、汇编查询的缓存等。这些缓存的应用可以大幅度的提高企业应用的运行效率。

分享到:
评论

相关推荐

    基于 DirectX 的覆盖层,用于绘制内存中的值.zip

    基于 DirectX 的覆盖层,用于绘制内存中的值d2rhud与https://github.com/Sh0ckFR/Universal-Dear-ImGui-Hook类似,但稍微清理了一下并使用vcpkg进行依赖管理。Stat Display 代码可以在 plugin/sample/sample.cpp 中编辑字体加载可以在 D3D12Hook.cpp 中编辑感谢 scizzydo 提供的调整大小逻辑和dschu012提供的 D2R 基本配置。

    (完整数据)30个省A股上市环保企业和高能耗企业年末市值及其占比2008-2020年

    ## 数据指标说明 资源名称:A股上市环保企业和高能耗企业年末市值及其占比 时间范围:2008-2020年 覆盖区域:我国30个省A股上市公司 主要指标:环保企业和高能耗企业年末市值和A股年末总市值 数据来源:整理自Wind数据库

    围绕 DirectXTex 和 Texconv 的 c++,CLI 包装器 .zip

    围绕 DirectXTex 和 Texconv 的 c++/CLI 包装器。直接XTexSharpDirectXTex 和 Texconv 周围的 c++/CLI 包装器。可用作 x64 和 x86 平台的托管 nuget。安装所有稳定版本和一些预发布版本均可在 NuGet 上获得。您可以在程序包管理器控制台中使用以下命令Install-Package DirectXTexSharp包裹 NuGet 稳定版 NuGet 预发布 下载直接XTexSharp 用法using DirectXTexSharp;fixed (byte* ptr = span){ var outDir = Path.Combine( new FileInfo(ddsPath).Directory.FullName, "out"); Directory.CreateDirectory(outDir); var fileName = Path.GetFileNameWithoutExtension(ddsPath); var extension

    【路径规划】堆算法栅格地图机器人路径规划【含Matlab仿真 2816期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    分形教程 (DirectX 11).zip

    分形基础知识###分形教程 (DirectX 11)1 - 复数简介2——什么是分形?3 - 谢尔宾斯基垫片4 - 谢尔宾斯基地毯5 - 曼德布洛特集合

    JAVA源码SpringBoot+vue+mysql 时装购物系统+数据库+指导文档

    通过标签分类管理等方式,实现: 管理员:首页、个人中心、用户管理、商品分类管理、颜色管理、商品信息管理、商品评价管理、系统管理、订单管理。 用户:首页、个人中心、商品评价管理、我的收藏管理、订单管理。 前台首页:首页、商品信息、商品资讯、个人中心。 后台管理、购物车、客服等功能。 从而达到对时装购物系统信息的高效管理。 内含指导文档,容易上手。

    基于PyTorch实现神经网络图像风格实时迁移和迭代式非实时风格迁移源码+文档说明+模型.zip

    基于PyTorch实现神经网络图像风格实时迁移和迭代式非实时风格迁移源码+文档说明+模型 【项目介绍】 实时风格迁移 迭代式的(非实时)风格迁移 图像风格迁移是深度学习中的一项有趣应用,它结合了两幅图像的内容和风格,创造出一幅新的图像。在内容上保留了原始图像的特征,还在风格上融合了另一幅图像的艺术特质。 主要功能点 实现了基于迭代优化的非实时风格迁移 实现了基于生成网络的实时风格迁移 提供了一些基本的使用示例 技术栈 PyTorch 卷积神经网络 图像生成 使用方法 提供了一些基本的使用示例,详细参数请见源代码或使用--help 命令获取 一、非实时风格迁移: 可以将输入内容图像和风格图像,即可完成风格迁移,运行时每一个epoch完成后会将生成的图像保存至output_dir 二、实时风格迁移: 模型训练: 这里提供了两个训练好的模型 一次性处理若干个图像: 对视频进行风格迁移: 原理介绍 我们需要对一个图像的内容和风格进行量化,具体方法如下: 使用预训练的深度卷积神经网络(例如 VGG-19)作为特征提取器。在这里,我们主要使用网络中间的一些卷积层的输出,而忽略了用

    基于Python的Flask框架在线电影网站系统详细文档+资料齐全.zip

    【资源说明】 基于Python的Flask框架在线电影网站系统详细文档+资料齐全.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    java毕设项目之基于闲置物品交易网站设计与实现(lw+PPT)(源码+说明文档+mysql).zip

    环境说明:开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器。 项目均可完美运行

    在任何原生支持 DLSS2 和 DLSS3 的 DirectX 12 游戏中,在任何兼容 DirectX 12 的 GPU 上模拟 DLSS 升频器和 DLSS-G 帧生成功能 .zip

    在任何原生支持 DLSS2 和 DLSS3 的 DirectX 12 游戏中,在任何兼容 DirectX 12 的 GPU 上模拟 DLSS 升频器和 DLSS-G 帧生成功能。DLSS 启用程序在任何原生支持 DLSS2 和 DLSS3 的 DirectX 12 游戏中,在任何兼容 DirectX 12 的 GPU 上模拟 DLSS 升频器和 DLSS-G 帧生成功能。如何如何构建安装应用程序为了构建 DLSS Enabler 的安装应用程序,您需要先安装 InnoSetup 软件(https://jrsoftware.org/isdl.php)。最佳版本是 6.2.0(不能低于这个版本,也不能高于这个版本 - 主要是因为某些 AV 会随机产生误报)。安装 InnoSetup 软件后,双击“DLSS enabler.iss”文件并在 InnoSetup Editor 中编辑其内容(例如构建版本等)。在构建新包之前,您需要从 INTEL 存储库下载最新的 libxess.dll 文件并将其放入“Dll 版本”子目录中,否则安装构建过程将因缺少文件而失败。构建

    curl的so库以及头文件

    curl的so库以及头文件

    30天开发操作系统 第 2 天

    30天开发操作系统 第 2 天

    基于 Java+Mysql 实现的旅行社机票预定系统课程设计

    【作品名称】:基于 Java+Mysql 实现的旅行社机票预定系统【课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入该系统,系统为旅客安排航班,打印取票通知和帐单,旅客在收到取票通知和帐单后可交费并于飞机起飞前一天凭取票通知和交款单经系统校对无误后打印机票给旅客。但是考虑到对于机票的购买人群,除了旅行社还有很多的散客,为了服务到所有旅客,我们把原本“旅行社-旅客”关系改变为“旅客-关联旅客”关系。关联旅客的信息经过旅客设定后存储在数据库内,不用每次都重复输入;可以满足原本旅行社为大量旅客一次性订购机票的需求,还可以满足私人出行时,为家人或朋友一起订购机票的需求。对于取票的流程,除了在机场的人工服务台可以沿用原取票流程外,我们还决 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    使用支持 DirectX 光线追踪的 GPU 进行实时基于物理的渲染.zip

    DirectX 光线追踪球体演示使用具有 DirectX 光线追踪功能的 GPU 进行基于物理的实时渲染。 使用 NVIDIA PhysX 进行光线追踪球体.mp4 DirectX.光线追踪.球体.mp4 特征PBR 金属/粗糙度工作流程使用 NVIDIA PhysX 进行刚体模拟图形设置窗口模式窗口 | 无边框 | 全屏解决HDR垂直同步NVIDIA Reflex相机抖动水平视场光线追踪俄罗斯轮盘赌跳出率采样数/像素NVIDIA 着色器执行重新排序NVIDIA RTXDI重新搅拌重新审视细胞尺寸可视化构建示例初始采样局部光照模式统一 | Power RIS | ReGIR RIS示例BRDF 采样时间重采样偏差校正模式基本 | 成对 | 光线追踪沸腾过滤强度空间重采样偏差校正模式基本 | 成对 | 光线追踪示例NVIDIA RTXGI夏普降尺度因子场景比例粗糙度阈值哈希网格可视化后期处理NVIDIA 实时降噪器降噪器ReBLUR | ReLAX验证覆盖超级分辨率NVID

    适用于 DirectX 上的 AMD 和 Intel 卡的 Nvidia 欺骗器.zip

    d3d12-代理DirectX 的显卡欺骗库我开发了这些库来绕过供应商锁定(主要用于 Streamline),当前代理充当 NVIDIA RTX 4090。安装要使用它,只需将其放在dxgi.dll可执行文件旁边就足够了。通常代理 dll 首先检查同一文件夹中的dxgi.o.dll、、、d3d12.o.dll文件,如果找不到文件,则从系统文件夹加载它们d3d12core.o.dll。d3d11.o.dlld3d11、d3d12 和 d3d12core 项目在此用于记录/调试目的。待办事项添加对某些选项的 ini 支持官方 Discord 频道https://discord.gg/2JDHx6kcXB

    该项目的主要目标是生成和可视化使用体素构建的地形 为了进行性能和实施比较,我们使用了不同的方法和计算技术来实现 .zip

    体素地形 介绍该项目的主要目标是生成和可视化使用体素构建的地形。为了进行性能和实施比较,我们使用了不同的方法和计算技术来实现。使用的技术该项目使用的技术列表如下DirectCompute 和 CUDA 用于并行地形生成可视化过程中使用的各种 DirectX 11 着色器(顶点着色器、像素着色器、几何着色器、外壳着色器、域着色器、计算着色器)用于着色器实现的 HLSLC#语言用于程序逻辑和序列算法的实现用于 CUDA 内核实现的 C 语言地形生成整个地形生成过程采用 CPU 序列算法实现,然后使用 Microsoft DirectCompute 和 Nvidia CUDA 并行算法实现。并行版本的性能提升非常显著,可以从几十到几百倍不等。生成过程采用以下算法和特征XORWOW 算法实现随机数生成使用分数布朗运动(噪声)生成体素权重使用数学方程式生成体素权重用于几何提取的行进立方体使用前缀扫描来优化并行生成地形可视化可视化是通过 DirectX 11 实现的。为了获得一些视觉效果,我们实施了以下算法环境光遮蔽三平面映射位

    【APF三维路径规划】人工势场算法球体障碍下无人机三维路径规划【含Matlab仿真 2581期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于Python + PyQt5非官方的简易中国铁路列车运行图系统详细文档+资料齐全.zip

    【资源说明】 基于Python + PyQt5非官方的简易中国铁路列车运行图系统详细文档+资料齐全.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    (完整数据)全国水文统计年报表2012-2022

    (完整数据)全国水文统计年报表2012-2022

    【配送路径规划】模拟退火算法无人机药品配送路线规划(条件:距离近优先)【含Matlab仿真 2872期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

Global site tag (gtag.js) - Google Analytics