JPA基础知识(三):相关接口/类

相关文章:
JPA基础知识(一):简介、基本注解
JPA基础知识(二):使用JPA持久化对象的步骤
JPA基础知识(三):相关接口/类
JPA基础知识(四):映射关联关系

JPA相关接口/类

一、Persistence

作用:通过createEntityManagerFactory的静态方法,获取EntityManagerFactory(实体管理器工厂)实例

  1. 带有一个参数:以JPA配置文件presistence.xml中持久化单元名为参数。使用presistence.xml文件中设置的属性。
    在这里插入图片描述
  2. 带有两个参数:第一个参数同上,第二个参数是一个Map类型用于设置JPA的相关属性,这时将忽略其他地方设置的属性。(作为重载方法)
    在这里插入图片描述

二、EntityManagerFactory

作用:用来创建EntityManager实例。EntityManagerFactory使用如下方法获得EntityManager实例。

  1. createEntityManager():用于创建实体管理器对象实例(常用)。
    在这里插入图片描述

  2. createEntityManager(Map map):用于创建实体管理器对象实例的重载方法,Map 参数用于提供 EntityManager的属性。

  3. isOpen():检查 EntityManagerFactory 是否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用close()方法将其关闭。

  4. close():关闭 EntityManagerFactory 。 EntityManagerFactory 关闭后将释放所有资源,isOpen()方法测试将返回 false,其它方法将不能调用,否则将导致IllegalStateException异常
    在这里插入图片描述

三、EntityManager

作用:是完成持久化操作的核心,即java实体类对象经过EntityManager变为持久化对象。
EntityManager:在一组实体类与底层数据源之间进行 O/R 映射的管理。

  • find(Class entityClass,Object primaryKey)

作用:获得指定ID的实体类对象,若不存在则返回null。

参数类型:

  • 被查询的实体类类型。
  • 代查找实体的主键。

在这里插入图片描述

  • getReference (Class entityClass,ObjectprimaryKey)

作用:类似于懒加载,首先获得实体类的代理对象,只用在用到时才加载。所以如果此 OID在数据库不存在,getReference()不会返回 null 值, 而是抛出异常EntityNotFoundException

在这里插入图片描述

  • persist (Object entity)

作用:使对象由临时状态变为持久化状态。

在这里插入图片描述

  1. 如果传入 persist() 方法的 Entity 对象已经处于持久化状态,则persist() 方法什么都不做。

  2. 如果对删除状态的 Entity 进行 persist() 操作,会转换为持久化状态。

  3. 如果对游离状态的实体执行persist() 操作,可能会在 persist() 方法抛出 EntityExistException(也有可能是在flush或事务提交后抛出)。

  • remove (Object entity)

作用:删除实例,同时会删除相关联的数据库记录。

在这里插入图片描述

  • merge (T entity)

作用:merge() 用于处理 Entity 的同步。即数据库的插入和更新操作

  • 实体的状态:
    • 新建状态: 新创建的对象,尚未拥有持久性主键。

    • 持久化状态:已经拥有持久性主键并和持久化建立了上下文环境

    • 游离状态:拥有持久化主键,但是没有与持久化建立上下文环境

    • 数据库中删除。

在这里插入图片描述

  1. 若传入的是一个临时对象:会创建一个新的对象,把临时对象的属性复制到新的对象中,然后对新的对象执行持久化操作。故新对象有ID,但之前的临时对象没有ID。
    在这里插入图片描述
  2. 若传入的是一个游离对象(对象有ID):若在EntityManager缓存中没有该对象,且在数据库中也没有对应记录,JPA会创建一个新的对象,然后把当前游离对象属性复制到性创建的对象中,ID不会复制,在对新的对象执行insert操作。故新对象与之前对象的ID不同。
    在这里插入图片描述
  3. 若传入的是一个游离对象==(对象有ID)==:若在EntityManager缓存中没有该对象,且在数据库中也有对应的记录,则JPA会查询对应的记录,然后返回该记录对象,再然后会把游离对象的属性复制到查询到的对象中。对查到的对象执行update操作。
    在这里插入图片描述
  4. 若传入的是一个游离对象==(对象有ID)==:若在EntityManager缓存中有对应的对象,JPA会把游离对象的属性复制到查询EntityManager缓存中的对象中,EntityManager缓存中的对象执行UPDATE。
    在这里插入图片描述
JPA的EntityManager与Hibernate的Session方法异同:
功能JPA的EntityManagerHibernate的Session区别
查找findget
查找(懒加载)getReferenceLoad
保存persistsavepersist:若对象有 id, 则不能执行 insert 操作, 而会抛出异常.
删除removedeleteRemove只能移除持久化对象,而Hibernate的delete方法还可以移除游离对象。
保存OR更新mergesaveOrUpdate
刷新refresh / flushrefresh / flush

四、EntityTransaction

  • begin()

用于启动一个事务,此后的多个数据库操作将作为整体被提交或撤消。若这时事务已启动则会抛出 IllegalStateException 异常。

  • commit()

用于提交当前事务。即将事务启动以后的所有数据库更新操作持久化至数据库中。

  • rollback()

撤消(回滚)当前事务。即撤消事务启动后的所有数据库更新操作,从而不对数据库产生影响。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值