JPA(Java Persistence API) 是 SUN 公司推出的一套 ORM 规范,充当 Java 对象和关系数据库系统之间的桥梁;本文主要介绍其基本概念。
JPA 1.0:于 2006 年发布
JPA 2.0:于 2009 年末发布
JPA 2.1:于 2013 年发布,它有如下重要特性:
1、Named Stored Procedure Query
2、Stored Procedure Query
3、Attribute Converter
4、Constructor Result Mapping
5、Programmatic Named Queries
6、Named Entity Graph
7、Entity Graph
8、JPQL Enhancements
9、Criteria API Bulk Operations
10、Unsynchronized Persistence Context
11、Generating DB Schema
12、CDI-Support in Entity Listener
详细说明可查看:https://thorben-janssen.com/jpa-21-overview/
JPA 2.2:于 2017 年发布,它有如下重要特性:
1、Stream query results
2、Make annotations @Repeatable
3、Support Java 8 Date and Time API
4、Support CDI Injection in AttributeConverters
5、Change Persistence Provider Discovery Mechanism for Java 9 Modules
6、Summary
详细说明可查看:https://thorben-janssen.com/whats-new-in-jpa-2-2
JPA 3.0:与 2020 年发布,它有如下变化:
1、包名修改,从 javax.persistence.* 修改为 jakarta.persistence.*
2、配置文件命名空间修改,从 http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd 改为 https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd
JPA 只是一个规范,定义了一些接口,没有提供实现;提供实现 JPA 规范的产品有:
Hibernate、EclipseLink、OpenJPA 等。
标准化
JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于 JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
容器级特性的支持
JPA 框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
简单方便
JPA 的主要目标之一就是提供更加简单的编程模型:在 JPA 框架下创建实体和创建 Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity 进行注释,JPA 的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易地掌握。JPA 基于非侵入式原则设计,因此可以很容易地和其它框架或者容器集成。
查询能力
JPA 的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是 Hibernate HQL 的等价物。JPA 定义了独特的 JPQL(Java Persistence Query Language),JPQL 是 EJB QL 的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
高级特性
JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

| 类/接口 | 描述 |
|---|---|
| EntityManagerFactory | EntityManager 的工厂类,负责创建并管理 EntityManager 实例。 |
| EntityManager | 对象持久化操作的接口 |
| Entity | 实体对象 |
| EntityTransaction | 事务接口,与 EntityManager 是一对一的关系 |
| Persistence | 该类用于创建 EntityManagerFactory |
| Query | JPQL 查询接口,用于查询或更新数据 |
类/接口之间的关系:

EntityManagerFactory 和 EntityManager 之间是一对多的关系。
EntityManager 和 EntityTransaction 之间是一对一.的关系,对于每个 EntityManager,都有一个 EntityTransaction。
EntityManager 和 Query 之间是一对多的关系,可以使用一个 EntityManager 执行多个查询。
EntityManager 和 Entity 之间是一对多的关系,一个 EntityManage 可以管理多个实体。
| 注解 | 说明 | 重要属性 |
| @Entity | 声明该类是一个实体类 | |
| @Table | 声明实体类对应的表名 | |
| @Id | 声明该属性为主键 | |
| @GeneratedValue | 声明主键的值自动生成 |
strategy:生成策略 generator:生成器 |
| @SequenceGenerator | 序列生成器 | sequenceName:序列名 name:生成器名称 |
| @TableGenerator | 表生成器,通过表生成id | table:表名 name:生成器名称 |
| @Column | 声明属性对应的字段信息 | name:字段名称 |
| @Transient | 声明该属性不持久到数据库 | |
| @NamedQuery | 声明静态查询 | |
| @NamedQueries | 声明一组静态查询 | |
| @OneToOne | 一对一映射 | |
| @OneToMany | 一对多映射 | |
| @ManyToOne | 多对一映射 | |
| @ManyToMany | 多对多映射 |
JPA 提供四种 Id 生成策略:
GenerationType.TABLE:使用一个特定的表来保存主键
GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
GenerationType.IDENTITY:主键由数据库自动生成(主要是自动增长型字段)
GenerationType.AUTO:主键由 JPA 实现产品控制(默认的策略)
各数据库对策略的支持情况如下:
| 数据库 | 支持的策略 |
| MySQL |
GenerationType.TABLE |
| Oracle |
GenerationType.AUTO |
| PostgreSQL |
GenerationType.TABLE |
JPQL(Java Persistence Query Language)是一种面向对象的查询语言,用于对持久化实体进行数据库操作。JPQL 使用实体对象模型代替数据库表来操作 SQL 查询。JPA 会将 JPQL 转换为 SQL,它为开发人员处理 SQL 任务提供了一个简单的平台。
JPQL 是实体 JavaBean 查询语言 (EJBQL) 的扩展,为其添加了以下重要功能:
JPQL 有如下特点:
Criteria API 是一套预定义的 API,用于定义实体查询, 是替换 JPQL 查询的另一种方法。 这些查询是类型安全的、可移植的并且易于通过更改语法进行修改。 与 JPQL 类似,它遵循抽象模式(易于编辑)和对象嵌入。 元数据 API 与标准 API 混合在一起,为标准查询建模持久实体。标准 API 的主要优点是可以在编译时更早地检测到错误。 基于字符串的 JPQL 查询和基于 JPA 标准的查询在性能和效率上是相同的。
Criteria API 的历史:
在 JPA 2.0 中,开发了 Criteria API,使查询标准化。
在 JPA 2.1 中,标准更新和删除(批量更新和删除)被增加进来。
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记
昨晚看到IDEA官推宣布IntelliJIDEA2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJIDEA2023.1针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施,使得Maven导入更快,并且在打开项目时IDE功能更早地可用。由于后台提交检查,新版本提供了简化的提交流程。IntelliJIDEA
最近在工作中,看到一些新手测试同学,对接口测试存在很多疑问,甚至包括一些从事软件测试3,5年的同学,在聊到接口时,也是一知半解;今天借着这个机会,对接口测试做个实战教学,顺便总结一下经验,分享给大家。计划拆分成4个模块跟大家做一个分享,(接口测试、接口基础知识、接口自动化、接口进阶)感兴趣的小伙伴记得关注,希望对你的日常工作和求职面试,带来一些帮助。注:文章较长有5000多字,希望小伙伴们认真看完,当然有些内容对小白同学不是太友好,如果你需要详细了解其中的一些概念或者名词,请在文章之后留言,后续我将针对大家的疑问,整理输出一些大家感兴趣的文章。随着开发模式的迭代更新,前后端分离已不是新的概念,