什么是JPA,JPA的概念

  • 什么是JPA

 JPA(Java Persistence API,Java持久化API),定义了对象-关系映射(ORM)以及实体对象持久化的标准接口,它是一套标准,具体的实现要根据不同的厂商来提供,就跟JDBC类型

  • 持久化单元

        持久化单元是运行时的配置的主要单元,它定义了提供程序在程序执行期间管理持久化类所需要知道的各种信息,例如数据库链接配置,实体信息,就是在持久化单元里面配置,可以在persistence.xml对它进行配置(在Spring中就不需要)

        对于每一个持久化单元,都存在一个EntityManagerFactory,所以可以将持久化单元的配置视为对于持该持久化单元的EntityManagerFactory工厂配置

        每个持久化单元都必须有一个名称,这样,应用程序在指定范围内唯一的标识它

  • 实体管理器

        实体在数据库中真正持久化之前,需要调用一个特定的API,这个API就是由实体管理器实现,在使用实体管理器的持久化API之前,实体就是一个普通的Java对象

        实体管理器是Java实体对象与数据库交互的中介,它负责管理一组对应的实体,包括这组实体的CRUD操作,实体管理器也负责与持久化上下文PersistenceContext进行交互,可以实现对实体不同状态转换的操作

        通过显示的把实体作为参数传递到一个方法中调用,或者是从数据库直接读取它,实体管理器获得一个实体的引用,此时,将该对象称为由实体管理器托管

        将实体管理器配置为能够持久化或管理特定类型(实体)的对象,读取他们和把他们写入到一个给定的数据库,并且它是由一个特定的持久化提供程序PersistenceProvider来实现,提供程序为整个Java持久化API提供后台实现引擎,从EntityManager到查询类以及SQL的实现   

        所有的实体管理器均来自EntityManagerFactory类型的工厂,实体管理器的配置是以创建它的EntityManagerFacotry为模版,但是把它单独定义为持久化单元,持久化单元隐式或显示的决定设置,特定的EntityManagerFacotry实例,的所有实体管理器上,使用的实体类都限定到该持久化单元,因此,在持久化单元及其具体的EntityManagerFactory存在一一对应关系
        持久化单元为了允许区分不同的EntityManagerFacotry而对他们进行命名,从而,应用程序可以决定采用哪一个配置或者持久化单元,用于特定实体的操作    

  • 实体操作和生命周期

            实体属于一个单一的持久化上下文,在任何给定的时间都不应该由一个以上的持久化上下文进行管理,说白了只能允许一个持久化上下文管理一个实体

        新建 New–即未有id值,实体新创建,尚未与持久化上下文关联
        托管 Managed–有id值,实体当前处于持久化上下文的管理之下,任何对该实体的更改都会在事务提交时自动同步到数据库
        游离 Detached–有id值,实体曾经处于托管状态,但现在已从持久化上下文中分离。它不再受持久化上下文的管理,因此对实体的更改不会自动同步到数据库
        删除 Removed–有id值,实体已被标记为删除。在事务提交时,它将从数据库中删除。

  • 持久化上下文

        实体管理器在任何给定的时间内所管理的实体对象的集合,它一般包含有当前事务范围内的,被管理的实体对象(Entity)的数据集合,称为它的持久化上下文        
        在使用JPA等ORM框架进行持久化时,持久化上下文是一个重要概念,它充当了应用程序和数据库之间的缓冲区,当通过ORM框架操作数据库时,实际上是与持久化上下文交互,而持久化上下文负责将这些操作转换为对应数据库的操作,而真正操作数据库的则是实体管理器

        在任何时候,具有相同持久化标识(ID)的Java实例,在持久化上下文中只能存在一个,也就是ID相同的实例只能存在一个

  • JPA的关系图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/293601.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【A-013】基于SSH的共享单车管理系统/共享单车出租系统

【A-013】基于SSH的共享单车管理系统/共享单车出租系统 开发环境: Eclipse/MyEclipse、Tomcat8、Jdk1.8 数据库: MySQL 适用于: 课程设计,毕业设计,学习等等 系统介绍: 基于SSH开发的共享单车管理系统/…

基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现

基于JavaSpringmvcmyabtishtml的鲜花商城系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

leecode 331 |验证二叉树的前序序列化 | gdb 调试找bug

计算的本质是数据的计算 数据的计算需要采用格式化的存储, 规则的数据结果,可以快速的按照指定要求存储数据 这里就不得不说二叉树了,二叉树应用场景真的很多 本题讲的是,验证二叉树的前序序列化 换言之,不采用建立树的…

Redis怎么测?这篇文章写的太全了

Redis是一个高性能、内存数据库和缓存系统,在开发和生产环境中被广泛应用。本文将介绍如何进行有效的Redis软件测试,以确保其稳定性、高性能和可靠性。 Redis作为一种非关系型数据库和缓存系统,被广泛用于支持高流量、低延迟的应用。为了保证…

算法学习——LeetCode力扣动态规划篇9(1035. 不相交的线、53. 最大子数组和、392. 判断子序列、115. 不同的子序列)

算法学习——LeetCode力扣动态规划篇9 1035. 不相交的线 1035. 不相交的线 - 力扣(LeetCode) 描述 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#x…

【分析教程】unity游戏修改so文件

基础知识 0x1.apk安装后在手机中的目录 apk安装后会在两个包下生成相关包:data/data/、data/app/。 这里拿网易云音乐的安装目录举例。Data/App目录下通常会有三个文件: lib文件夹(包含so库文件)、 ‚oat文件夹(O…

计算机网络-RIP动态路由协议简介

一、概述 前面我们学习了动态路由协议按照工作机制及算法划分可以分为:距离矢量路由协议DV型和链路状态路由协议LS型。RIP就是典型的距离矢量路由协议,但是实际工作中用得已经比较少了。 距离矢量路由协议DV: RIP 链路状态路由协议LS: OSPF IS-IS 二、RI…

C++11:基于C++98的语法更新

一、简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并…

【机器学习】数据探索---python主要的探索函数

在上一篇博客【机器学习】数据探索(Data Exploration)—数据质量和数据特征分析中,我们深入探讨了数据预处理的重要性,并介绍了诸如插值、数据归一化和主成分分析等关键技术。这些方法有助于我们清理数据中的噪声、消除异常值,以及降低数据的…

设计模式-概述篇

1. 掌握设计模式的层次 第1层:刚开始学编程不久,听说过什么是设计模式第2层:有很长时间的编程经验,自己写了很多代码,其中用到了设计模式,但是自己却不知道第3层:学习过了设计模式,…

MATLAB 自定义生成圆柱点云(49)

MATLAB 自定义生成圆柱点云(49) 一、算法介绍二、具体实现1.代码2.效果一、算法介绍 按照一些提前指定的圆柱参数,自定义生成圆柱点云,可添加噪声,用于后续的实验测试 二、具体实现 1.代码 代码如下(示例): % 指定圆柱的参数 radius = 5; % 圆柱半径 height = 20…

springcloud基本使用三(搭建nacos)

window下安装nacos: 下载页面:Releases alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - Releases alibaba/nacoshttps://github.com/alibaba/nacos/releases…

医药行业CRM解决方案:如何选择适合的医药CRM系统?

医药市场的竞争也同样激烈,抓住市场、抢占客户拼的是产品、速度,更是精细化的客户管理。如何抓住客户,并留住客户,是医药公司要考虑的问题。人工机械地记录数据信息很容易就被市场淘汰,所以医药公司也需要用数字化工具…

大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?

自 2017 年发表“ Attention Is All You Need ”论文以来,Transformer 架构一直是自然语言处理 (NLP) 领域的基石。它的设计多年来基本没有变化,随着旋转位置编码 (RoPE) 的引入,2022年标志着该领域的重大发展。 旋转位置嵌入是最先进的 NLP…

一文get,最容易碰上的接口自动化测试问题汇总

本篇文章分享几个接口自动化用例编写过程遇到的问题总结,希望能对初次探索接口自动化测试的小伙伴们解决问题上提供一小部分思路。 sql语句内容出现错误 空格:由于有些字段判断是变量,需要将sql拼接起来,但是在拼接字符串时没有…

Python接口自动化测试-篇1(postman+requests+pytest+allure)

Python接口自动化测试是一种使用Python编程语言来编写脚本以自动执行针对应用程序接口(APIs)的测试过程。这种测试方法专注于检查系统的不同组件或服务之间的交互,确保它们按照预期规范进行通信,而不涉及用户界面(UI&a…

CVE-2021-38001:TianfuCup RCE bug Type confusion in LoadIC::ComputeHandler

文章目录 前言环境搭建漏洞分析漏洞利用总结参考 前言 该漏洞在似乎在 bugs.chromium 上没有公开?笔者并没有找到相关漏洞描述,所以这里更多参考了别人的分析。 本文需要一定的 ICs 相关知识,请读者自行先查阅学习,比较简单&…

国内ip怎么来回切换:操作指南与注意事项

在数字化时代,互联网已经成为我们日常生活、学习和工作中不可或缺的一部分。然而,随着网络应用的不断深化,用户对于网络环境的稳定性和安全性要求也越来越高。其中,IP地址作为网络中的关键标识,其切换与管理显得尤为重…

Navicat 干货 | 通过检查约束确保 PostgreSQL 的数据完整性

数据完整性对于任何数据库系统来说都是很重要的一方面,它确保存储的数据保持准确、一致且有意义的。在 PostgreSQL 中,维护数据完整性的一个强大工具是使用检查约束。这些约束允许你定义数据必须遵守的规则,以防止无效数据的插入或修改。本文…

matlab 复制点云

目录 一、概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 1、算法概述