JPA相关接口/类

本文详细介绍了Java持久化API(JPA)中的关键组件,包括Persistence类、EntityManagerFactory接口、EntityManager对象及其常用方法,如persist、remove、merge等,以及EntityTransaction接口的事务管理功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Persistence

Persistence   是用 EntityManagerFactory 实例 该类包含一个名 createEntityManagerFactory 静态方法
createEntityManagerFactory 方法 有如下两个重载版本
带有 一个参数的方法 JPA 配置文件 persistence.xml 中的 持久化单元名 参数
带有 两个参数的方 法:前 一个参数含义相同,后一个 参数 Map 类型 用于 设置 JPA 相关属性 ,这时将忽略其它地方设置的属性 Map 对象 的属性名必须 JPA 实现 库提供商的名字空间约定的属性 名。

EntityManagerFactory

EntityManagerFactory 接口 主要 用来创 EntityManager 实例 该接口约定了如下 4 个方法
createEntityManager () 用于创建实体管理器对象实例。
createEntityManager (Mapmap) 用于创建实体管理器对象实例的重载方法, Map 数用于提 EntityManager 的属 性。
isOpen () EntityManagerFactory 否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用 close() 方法将其关闭。
close() EntityManagerFactory EntityManagerFactory 闭后将释放所有资源, isOpen () 方法测试将 返回 false ,其它方法将不能调用,否则将导致 IllegalStateException 异常


EntityManager

JPA 规范 , EntityManager 完成 久化操 作的核心对象。 实体作为 普通 Java 对象 ,只有在 调用 EntityManager 其持久化后才会变成 持久化对象 EntityManager 对象 在一 组实 体类与底层数据源之间 进行 O/R 映射 的管理。它可以用来管理和 更新 Entity Bean , 椐主键 查找 Entity Bean , 可以通过 JPQL 语句查询实体
实体 的状态 :
新建状态 :    新创建的对象, 尚未拥有持久性主键
持久化 状态 :已经拥有持久性主键并 和持久化建立了上下文环境
游离状态 拥有持久化主键,但是没有与持久化建立上下文环
删除状态 拥有持久化主键,已经和持久化建立上下文环境,但是 数据库中 删除

find (Class<T> entityClass,Object primaryKey ) 返回指定 OID 对应的实体类对象, 如果这个实体存在于当前的持久化环境 ,则 返回一个被缓存的 对象;否则 会创建一个新 Entity, 加载数据库中相关 信息 OID 存在于数据库中,则返回一 null 。第一个参数为被查询的 实体类类型 ,第二个参数为待查找实体的 主键值
getReference (Class<T> entityClass,Object primaryKey ) find() 方法类似,不同的是:如果缓存中 不存在指定的 Entity, EntityManager 创建一 Entity 的代理,但是不会立即加载数据库中的信息, 只有第一次 真正使用 Entity 属性才加载,所以如果 OID 数据库不存在, getReference () 不会返回 null , 是抛出 EntityNotFoundException
persist (Object entity) 用于将新创建 Entity 纳入到 EntityManager 管理。该方法执行后, 传入 persist() 方法的 Entity 对象 转换 持久化 状态。
如果传入 persist() 方法的 Entity 对象 已经 处于 持久化 状态 persist() 方法什么都 不做
如果 对删除状态 Entity 进行 persist() 操作 ,会转换 持久化 状态。
如果 对游离状态的实体 执行 persist() 操作 ,可能会 persist() 方法 EntityExistException ( 也有可能是在 flush 或事务提交后抛出 )
remove(Object entity) 删除实例 。如果实例是被管理的,即与数据库实体记录关联,则同时会删除关联的数据库记录
merge (T entity) merge () 用于处理 Entity 同步。即数据库的插入和更新 操作
flush() 同步 持久上下文环境,即将持久上下文环境的所有未保存实体的状态信息保存到数据库中。
setFlushMode ( FlushModeType flushMode ) 设置 持久上下文环境的 Flush 模式。参数可以取 2 枚举
FlushModeType.AUTO 自动更新数据库实体
FlushModeType.COMMIT 直到提交事务时才更新数据库记录。
getFlushMode () 获取 持久上下文环境的 Flush 模式。返回 FlushModeType 类的枚举值。
refresh (Object entity ) 数据库实体记录的值更新实体对象的状态,即更新实例的属性值。
clear () 清除 持久上下文环境,断开所有关联的实体。如果这时还有未提交的更新则会被撤消。
contains (Object entity ) 判断 一个实例是否属于当前持久上下文环境管理的实体
isOpen () 判断当前的实体管理器是否是打开状态。
getTransaction () 返回资源层的事务对象。 EntityTransaction 实例可以用于开始和提交多个事务
close () 关闭实体管理器。之后若调用实体管理器实例的方法或其派生的查询对象的方法都将抛出 IllegalstateException 异常,除了 getTransaction isOpen 方法 ( 返回 false) 。不过,当与实体管理器关联的事务处于活动状态时,调用 close 方法后持久上下文将仍处于被管理状态,直到事务完成。
createQuery (String qlString ) 创建一个查询对象
createNamedQuery (String name ) 根据 命名的查询语句块创建查询对象。参数为命名的查询语句。
createNativeQuery (String sqlString ) 使用标准 SQL 语句创建查询对象。参数为标准 SQL 语句字符串
createNativeQuery (String sqls ,String resultSetMapping ) 使用 标准 SQL 语句创建查询对象,并指定返回结果 Map 的名称

EntityTransaction
EntityTransaction 接口 用来管理资源层实体管理器的事务操作。通过调用实体管理器的 getTransaction 得其实例
begin()
用于 启动一个事务 ,此后的多个数据库操作将作为整体被提交或撤消。若这时事务已启动则会抛 IllegalStateException 异常
commit()
用于 提交当前事务 。即将事务启动以后的所有数据库更新操作持久化至数据库中。
rollback()
撤消 ( 回滚 ) 当前事务 。即撤消事务启动后的所有数据库更新操作,从而不对数据库产生影响。
setRollbackOnly ()
使当前事务只能被撤消。
getRollbackOnly ()
查看当前事务是否设置了只能撤消标志。
isActive ()
查看当前事务是否是活动的。如果返回 true 则不能调用 begin 方法,否则将抛 IllegalStateException 异常 ;如果 返回 false 不能 调用 commit rollback setRollbackOnly getRollbackOnly 方法 ,否则将抛 IllegalStateException 异常。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值