一篇文章带你搞定 JPA 中的 API 对象(Persistence/EntityManagerFactory/EntityManager/EntityTransaction)

我们已经学习了:一篇文章带你搞定 JPA 的基本使用

知道了 JPA 的操作步骤:

1.加载配置文件创建实体管理器工厂
2.根据实体管理器工厂,创建实体管理器
3.创建事务对象,开启事务
4.增删改查操作
5.提交事务
6.释放资源

接下来具体看下其中的 API 的功能特性。

一、Persistence对象

 //1.加载配置文件创建工厂(实体管理器工厂)对象
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
Persisitence:静态方法(根据持久化单元名称创建实体管理器工厂)
				createEntityMnagerFactory(持久化单元名称)
作用:创建实体管理器工厂

Persistence对象主要作用是用于获取EntityManagerFactory对象的 。通过调用该类的createEntityManagerFactory静态方法,根据配置文件中持久化单元名称创建EntityManagerFactory

二、EntityManagerFactory

//2.通过实体管理器工厂获取实体管理器
EntityManager em = factory.createEntityManager();
EntityManagerFactory :获取EntityManager对象
方法:createEntityManager
	* 内部维护的很多的内容
				内部维护了数据库信息,
				维护了缓存信息
				维护了所有的实体管理器对象
				再创建EntityManagerFactory的过程中会根据配置创建数据库表
	* EntityManagerFactory的创建过程比较浪费资源
			特点:线程安全的对象
				多个线程访问同一个EntityManagerFactory不会有线程安全问题
	* 如何解决EntityManagerFactory的创建过程浪费资源(耗时)的问题?
			思路:创建一个公共的EntityManagerFactory的对象
	* 静态代码块的形式创建EntityManagerFactory

EntityManagerFactory 接口主要用来创建 EntityManager 实例

由于EntityManagerFactory 是一个线程安全的对象(即多个线程访问同一个EntityManagerFactory 对象不会有线程安全问题),并且EntityManagerFactory 的创建极其浪费资源,所以在使用JPA编程时,我们可以对EntityManagerFactory 的创建进行优化,只需要做到一个工程只存在一个EntityManagerFactory 即可

三、EntityManager

 //3.获取事务对象,开启事务
EntityTransaction tx = em.getTransaction(); //获取事务对象

EntityManager对象:实体类管理器
	* getTransaction : 获取事务对象
	* presist : 保存
	* merge  : 更新
	* remove : 删除
	* find/getRefrence : 根据id查询

在 JPA 规范中, EntityManager是完成持久化操作的核心对象。实体类作为普通 java对象,只有在调用 EntityManager将其持久化后才会变成持久化对象。EntityManager对象在一组实体类与底层数据源之间进行 O/R 映射的管理。它可以用来管理和更新 Entity Bean, 根椐主键查找 Entity Bean, 还可以通过JPQL语句查询实体。

我们可以通过调用EntityManager的方法完成获取事务,以及持久化数据库的操作

四、EntityTransaction

//开启事务
tx.begin();
EntityTransaction对象 : 事务
	* begin:开启事务
	* commit:提交事务
	* rollback:回滚

在 JPA 规范中, EntityTransaction是完成事务操作的核心对象,对于EntityTransaction在我们的 java 代码中承接的功能比较简单

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个错误是Java程序在运行时找不到javax.persistence.entitymanagerfactory类所引起的。这个类通常是在Java Persistence API (JPA)使用的,它提供了一种持久化数据的方式。这个错误通常是由于缺少相关的JAR包或者类路径不正确所引起的。要解决这个问题,可以尝试添加相关的JAR包到程序的类路径,或者检查类路径是否正确设置。 ### 回答2: 这个错误提示是 Java 程序常见的错误之一,通常会发生在使用 Hibernate 框架时。它的原因是因为程序缺少必要的类库,无法找到 javax.persistence.EntityManagerFactory 这个类。这个类是 Java Persistence APIJPA)的一部分,通过它可以创建 EntityManager 对象管理实体对象。 这个错误通常在以下情况下发生: 1. 缺少依赖:程序的类路径没有包含必要的类库或者包含的类库版本过低。可以检查相关的依赖配置,添加必要的类库。 2. 类名错误:类名和包名拼写错误或大小写不一致。可以检查相关的类名和包名是否正确。 3. 程序冲突:程序使用了不同版本的类库导致冲突。可以检查程序所有使用到的类库版本,尽量使用同一个版本。 4. 类库路径错误:类库的路径设置错误,程序无法找到相关的类库。可以检查程序的类路径配置是否正确。 针对这些原因,我们可以采取以下措施解决这个问题: 1. 添加缺少的依赖:检查程序使用到的类库依赖,添加缺少的类库或者更新版本。可以使用 Maven、Gradle 等工具管理依赖。 2. 修改类名和包名:检查相关的类名和包名,确保拼写和大小写都正确。 3. 解决类库冲突:检查程序所有使用到的类库版本,使用同一个版本。可以使用 Maven、Gradle 等工具管理依赖,并对相关的依赖进行冲突解决。 4. 修改类库路径:检查程序的类路径配置是否正确,确保程序能够找到相关的类库。 综上所述,java.lang.NoClassDefFoundError: javax/persistence/EntityManagerFactory 错误通常是由于缺少必要的类库或者类库冲突所导致的。如果发生这个错误,需要仔细分析错误的原因,并采取相应的措施进行解决。 ### 回答3: Java.lang.NoClassDefFoundError: javax/persistence/EntityManagerFactory 是一个 Java 错误,它指出在运行时的类路径找不到 javax.persistence.EntityManagerFactory 类。 javax.persistence 包属于 Java Persistence APIJPA)规范,是 Java 持久化层的一部分,而 EntityManagerFactory 则是 JPA 的一个核心接口,负责创建和管理 EntityManager 对象。在使用 JPA 进行对象关系映射时,我们需要引用 javax.persistence 包并使用其的类和接口。 出现该错误的原因有很多,比如: 1.类路径问题:如果项目运行所需的 jar 包或类库没有正确配置到类路径,就会导致 JVM 在运行时找不到对应的类或接口。 2.版本不兼容:如果项目使用的 javax.persistence 包与 Java 编译器版本不兼容,也会报出该错误。比如使用 JDK 1.8 编译的代码运行在 JRE 1.7 上,就可能会出现该问题。 3.缺少依赖:在项目构建和部署过程,如果遗漏了某些依赖包或库文件,就可能会导致运行时找不到相关的类或接口。 为了解决这个问题,我们可以尝试以下几个步骤: 1.检查类路径:首先,我们需要检查项目的类路径,确保所有需要的 jar 包或类库都正确配置到其。可以使用 Eclipse、Intellij IDEA 等工具查看和修改项目的类路径。 2.更新依赖:有时候我们可能需要更新项目的某些依赖,比如更新 JPA 的版本或升级相关的库文件。可以使用 Maven 等构建工具自动管理依赖,或手动下载并替换相关的 jar 包。 3.检查 Java 版本:如果出现版本不兼容的问题,可以尝试升级 Java 编译器或降低项目的 JRE 版本。 4.打包方式:最后,如果我们是使用 jar 包进行项目部署,在创建 jar 包时需要将依赖的 jar 包打包进去。可以使用 Maven 的 shade 插件或使用 Eclipse 的导出功能来打包项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值