百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

JPA核心接口EntityManager之API功能详解(三)

ccwgpt 2024-09-21 13:44 25 浏览 0 评论

JPA入门精要系列:

(1):JPA框架组件核心组成

(2):EntityManager概要及API一览表

(3):EntityManager API功能详解(二)

本文由牛旦教育原创出品,欢迎收藏、点赞、分享。

转载请注明来源@牛旦教育IT课堂

EntityManager常用方法详解

EntityManager API功能详解(二)

1.1.1 void refresh(java.lang.Object entity, LockModeType lockMode)

功能説明:

从数据库中刷新实例的状态,覆盖对实体所做的更改(如果有的话),并根据给定的锁类型锁定它。

如果锁定模式类型是悲观的,并且找到了实体实例,但无法锁定时:

  • -如果数据库锁定失败导致事务级回滚,则会抛出PessimisticLockException;
  • -如果数据库锁定失败仅导致语句级回滚,则会抛出LockTimeoutException。

方法参数:

Entity-要刷新的实体;

lockMode-锁类型。

方法异常:

? IllegalArgumentException—如果实例不是有效实体或者实体为非托管实体;

? TransactionRequiredException—如果没有事务,而使用类型PersistenceContextType.TRANSACTION或非NONE模式的锁,在容器管理的EntityManager实例上调用时抛出此异常。

? EntityNotFoundException—如果实体在数据库中不再存在;

? PessimisticLockException——如果悲观锁失败,事务被回滚;

? LockTimeoutException——如果悲观锁定失败,并且只有语句被回滚;

? PersistenceException——如果进行了不支持的锁调用。

本方法是在Java Persistence 2.0开始加入的。

1.1.2 void refresh(java.lang.Object entity,LockModeType lockMode,java.util.Map<java.lang.String,java.lang.Object> properties)

功能说明:

从数据库中刷新实例的状态,覆盖对实体所做的更改(如果有的话),并根据给定的锁模式类型和指定的属性对其进行锁定。

如果锁定模式类型是悲观的,并且找到了实体实例,但无法锁定时:

  • -如果数据库锁定失败导致事务级回滚,则会抛出PessimisticLockException;
  • -如果数据库锁定失败仅导致语句级回滚,则会抛出LockTimeoutException。

如果某个特定于供应商的属性或提示不被识别,它将被默认忽略。

可移植应用程序不应该依赖于标准的超时提示。根据使用的数据库和提供者使用的锁定机制,可能观察到提示,也可能不观察到提示。

方法参数:

entity –实体;

lockMode –锁模式;

properties –标准的和特定厂商的属性提示。

方法异常:

? IllegalArgumentException—如果实例不是有效实体或者实体为非托管实体;

? TransactionRequiredException—如果没有事务,而使用类型PersistenceContextType.TRANSACTION或非NONE模式的锁,在容器管理的EntityManager实例上调用时抛出此异常。

? EntityNotFoundException—如果实体在数据库中不再存在;

? PessimisticLockException——如果悲观锁失败,事务被回滚;

? LockTimeoutException——如果悲观锁定失败,并且只有语句被回滚;

? PersistenceException——如果进行了不支持的锁调用。

本方法是在Java Persistence 2.0开始加入的。

1.1.3 void clear()

方法功能:

清除持久性上下文,导致所有托管实体被分离(可以理解为游离态或飘忽态)。对未刷新到数据库的实体所做的更改将不会持久。

1.1.4 void detach(java.lang.Object entity)

方法功能:

从持久性上下文中删除给定的实体,从而使托管实体分离。如果对实体进行了未刷新的更改(包括删除实体),则不会同步到数据库。以前引用分离实体的实体将继续引用它。

方法参数:

entity-要分离的实体对象;

方法异常:

- IllegalArgumentException :如果参数实例不是个有效的实体则抛出此异常。

本方法是在Java Persistence 2.0开始加入的。

1.1.5 boolean contains(java.lang.Object entity)

方法功能:

检查实例是否是属于当前持久性上下文的托管实体实例。

方法参数:

entity –要检查的实体对象;

返回值:

布尔值true和false,表示是否在当前的持久化上下文中。t

方法异常:

IllegalArgumentException:如果不是有效实体就会抛出此异常。

1.1.6 LockModeType getLockMode(java.lang.Object entity)

方法功能:

获取当前实体的锁模式;

方法参数:

Entity-指定的实体对象。

返回值:

返回实体对象用的锁类型;

方法异常:

TransactionRequiredException - 如果没有事务,则有从此异常

java.lang.IllegalArgumentException - 如果实例不是托管实体且事务处于活动状态

本方法是在Java Persistence 2.0开始加入的。

1.1.7 void setProperty(java.lang.String propertyName, java.lang.Object value)

方法功能:

设置实体管理器的属性。如果某个特定于供应商的属性无法识别,它将被默认忽略。

方法参数:

propertyName –属性名子;

value –对应的属性值;

方法异常:

java.lang.IllegalArgumentException-如果第二个参数对实现是无效的,则抛出该异常

本方法是在Java Persistence 2.0开始加入的。

1.1.8 java.util.Map<java.lang.String,java.lang.Object> getProperties()

方法功能:

获取对实体管理器有效的属性和关联值。若更改此映射的内容则并不会更改配置。

返回值:

返回实体管理器有效的属性映射。

本方法是在Java Persistence 2.0开始加入的。

1.1.9 java.util.Set<java.lang.String> getSupportedProperties()

方法功能:

获取支持与实体管理器一起使用的属性的名称。这些与属性和提示相对应属性名,这些属性和提示可以传递给EntityManager接口的方法,该接口接受properties参数或与PersistenceContext注释一起使用。这些属性包括所有标准的实体管理器提示和属性,以及提供器支持的特定于供应商的提示和属性。这些属性可能有效,也可能不有效。

返回值:

以集合的形式返回所有属性的名子。

本方法是在Java Persistence 2.0开始加入的。

1.1.10 Query createQuery(java.lang.String qlString)

方法功能:

创建用于执行Java持久性查询语言语句的查询(Query)实例。

方法参数:

qlString-一条有效的Java Persistence 查询字符串

方法返回值:

一个Query类型的查询实例。

方法异常:

java.lang.IllegalArgumentException - 如果查询字符串无效,则抛出该异常

1.1.11 <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery)

方法功能:

为执行条件查询创建TypedQuery类型实例。

方法参数:

criteriaQuery - 一个标准查询对象;

返回值:

返回一个新的查询实例;

方法异常:

java.lang.IllegalArgumentException - 若条件查询无效,这抛出该异常。

本方法是在Java Persistence 2.0开始加入的。

1.1.12 <T> TypedQuery<T> createQuery(java.lang.String qlString, java.lang.Class<T> resultClass)

方法功能:

创建用于执行Java持久性查询语言语句(JPQL)的TypedQuery实例。查询的select列表必须只包含一个项,该项必须可赋值给resultClass参数指定的类型。

方法参数:

qlString - 有效的Java持久性查询字符串;( a Java Persistence query string)

resultClass - 指定的查询结果类型 ;( the type of the query result)

方法返回值:

返回新的查询示例。

方法异常:

java.lang.IllegalArgumentException - 如果发现查询字符串无效,或者发现查询结果不能分配给指定的类型,则抛出此类型。

本方法是在Java Persistence 2.0开始加入的。

1.1.13 Query createNamedQuery(java.lang.String name)

方法功能:

创建用于执行命名查询的查询(Query)实例(在Java持久性查询语言JPQL中或在原生SQL中)。

方法参数:

name -在元数据中定义的查询的名称。

方法返回值

返回一个新的查询实例。

方法异常:

java.lang.IllegalArgumentException -如果给定名称的查询没定义,或者发现查询字符串无效。

1.1.14 <T> TypedQuery<T> createNamedQuery(java.lang.String name, java.lang.Class<T> resultClass)

方法功能:

创建TypedQuery实例以执行JPQL(Java持久性查询语言)命名查询。查询的select列表必须只包含一个项,该项必须可赋值给resultClass参数指定的类型。

方法参数:

? name - 在元数据中定义的查询名称;

? resultClass - 查询结果类型。

返回结果:

新的查询实例 。

方法异常:

IllegalArgumentException - 如果给定名称的查询没定义,或者发现查询字符串无效,或者发现查询结果不能分配给指定的类型,则抛出此异常。

本方法是在Java Persistence 2.0开始加入的。

1.1.15 Query createNativeQuery(java.lang.String sqlString)

方法功能:

创建用于执行原生SQL语句(例如,用于更新或删除)的Query类型查询实例。

方法参数:

sqlString - 原生SQL查询字符串。

返回结果:

新的查询实例。

1.1.16 Query createNativeQuery(java.lang.String sqlString,java.lang.Class resultClass)

方法功能:

创建用于执行原生SQL查询的Query类型查询实例。

方法参数:

sqlString - 一条原生SQL查询语句;

resultClass - 返回结果的实例类型。

返回结果:

一个新的查询实例。

1.1.17 Query createNativeQuery(java.lang.String sqlString,java.lang.String resultSetMapping)

方法功能:

创建用于执行原生SQL查询的Query类型查询实例。

方法参数:

sqlString - 一条原生SQL查询字符串;

resultSetMapping - 结果集映射的名子。

返回结果:

新的Query类型的查询实例。

1.1.18 void joinTransaction()

方法功能:

向实体管理器表明JTA事务处于活动状态。应该在活动事务范围之外创建的应用托管的JTA实体管理器上调用此方法,以将其与当前JTA事务关联起来。

方法异常:

TransactionRequiredException - 若无事务,则抛出此异常。

1.1.19 <T> T unwrap(java.lang.Class<T> cls)

方法功能:

返回指定类型的对象,以允许访问特定于提供器(provider)的API。如果提供器的EntityManager实现不支持指定的类,则抛出PersistenceException。比如可通过实体管理器返回一个数据库连接对象(Connection)。

方法参数:

cls - 要返回的对象的类。这通常是底层的EntityManager实现类或它实现的接口。

返回结果:

返回指定类(class)的实例(比如数据库连接对象)。

返法异常:

PersistenceException -如果提供器不支持此调用,则会抛出该异常

本方法是在Java Persistence 2.0开始加入的。

1.1.20 java.lang.Object getDelegate()

方法功能:

返回EntityManager的底层提供器对象(如果可用)。此方法的结果是特定于实现的。unwrap方法是新应用程序中的首选方法。

返回结果:

返回EntityManager底层提供器对象。

1.1.21 void close()

方法功能:

关闭应用程序管理的或说托管的实体管理器。调用close方法之后,EntityManager实例上的所有方法以及从中获得的任何Query和TypedQuery对象都将抛出IllegalStateException,但 getProperties、getSupportedProperties、getTransaction和isOpen(将返回false)除外。如果在实体管理器与活动事务关联时调用此方法,则在事务完成之前将一直处于管理持久性上下文中。

方法异常:

java.lang.IllegalStateException -如果实体管理器是容器管理的,调用此方法会抛出此异常。

1.1.22 boolean isOpen()

方法功能:

判断实体管理器是否已打开。

返回结果:

在实体管理器关闭之前为总是true。

1.1.23 EntityTransaction getTransaction()

方法功能:

返回资源级的EntityTransaction对象。EntityTransaction实例可以串行地用于开始和提交多个事务。

返回结果:

返回EntityTransaction类对象。

方法异常:

java.lang.IllegalStateException - 如果在JTA类型的实体管理器上调用此方法,则抛出此异常。

1.1.24 EntityManagerFactory getEntityManagerFactory()

方法功能:

为当前实体管理器返回实体管理器工厂。

返回结果:

返回EntityManagerFactory实 例

方法异常:

java.lang.IllegalStateException - 如果实体管理器已关闭,调用此方法则抛出该异常。

本方法是在Java Persistence 2.0开始加入的。

1.1.25 QueryBuilder getQueryBuilder()

方法功能:

返回用于创建CriteriaQuery对象的QueryBuilder实例。

返回结果:

返回QueryBuilder类型实例。

方法异常:

IllegalStateException-如果实体管理器已关闭,调用此方法时抛出该异常。

本方法是在Java Persistence 2.0开始加入的。

1.1.26 Metamodel getMetamodel()

方法功能:

返回一个Metamodel接口实例,用于访问持久性单元的元模型。

返回结果:

返回Metamodel实例。

方法异常:

IllegalStateException-如果实体管理器已关闭,调用此方法时抛出该异常。

本方法是在Java Persistence 2.0开始加入的。

至此,EntityManager接口的API功能详细参考就介绍完了。

下一篇,将综合应用几个核心接口及相关类,

来构建一个JPA项目,较全面的应用几个核心组件接口。


相关推荐

团队管理“布阵术”:3招让你的团队战斗力爆表!

为何古代军队能够以一当十?为何现代企业有的团队高效似“特种部队”,有的却松散若“游击队”?**答案正隐匿于“布阵术”之中!**今时今日,让我们从古代兵法里萃取3个核心要义,助您塑造一支战斗力爆棚的...

知情人士回应字节大模型团队架构调整

【知情人士回应字节大模型团队架构调整】财联社2月21日电,针对原谷歌DeepMind副总裁吴永辉加入字节跳动后引发的团队调整问题,知情人士回应称:吴永辉博士主要负责AI基础研究探索工作,偏基础研究;A...

豆包大模型团队开源RLHF框架,训练吞吐量最高提升20倍

强化学习(RL)对大模型复杂推理能力提升有关键作用,但其复杂的计算流程对训练和部署也带来了巨大挑战。近日,字节跳动豆包大模型团队与香港大学联合提出HybridFlow。这是一个灵活高效的RL/RL...

创业团队如何设计股权架构及分配(创业团队如何设计股权架构及分配方案)

创业团队的股权架构设计,决定了公司在随后发展中呈现出的股权布局。如果最初的股权架构就存在先天不足,公司就很难顺利、稳定地成长起来。因此,创业之初,对股权设计应慎之又慎,避免留下巨大隐患和风险。两个人如...

消息称吴永辉入职后引发字节大模型团队架构大调整

2月21日,有消息称前谷歌大佬吴永辉加入字节跳动,并担任大模型团队Seed基础研究负责人后,引发了字节跳动大模型团队架构大调整。多名原本向朱文佳汇报的算法和技术负责人开始转向吴永辉汇报。简单来说,就是...

31页组织效能提升模型,经营管理团队搭建框架与权责定位

分享职场干货,提升能力!为职场精英打造个人知识体系,升职加薪!31页组织效能提升模型如何拿到分享的源文件:请您关注本头条号,然后私信本头条号“文米”2个字,按照操作流程,专人负责发送源文件给您。...

异形柱结构(异形柱结构技术规程)

下列关于混凝土异形柱结构设计的说法,其中何项正确?(A)混凝土异形柱框架结构可用于所有非抗震和抗震设防地区的一般居住建筑。(B)抗震设防烈度为6度时,对标准设防类(丙类)采用异形柱结构的建筑可不进行地...

职场干货:金字塔原理(金字塔原理实战篇)

金字塔原理的适用范围:金字塔原理适用于所有需要构建清晰逻辑框架的文章。第一篇:表达的逻辑。如何利用金字塔原理构建基本的金字塔结构受众(包括读者、听众、观众或学员)最容易理解的顺序:先了解主要的、抽象的...

底部剪力法(底部剪力法的基本原理)

某四层钢筋混凝土框架结构,计算简图如图1所示。抗震设防类别为丙类,抗震设防烈度为8度(0.2g),Ⅱ类场地,设计地震分组为第一组,第一自振周期T1=0.55s。一至四层的楼层侧向刚度依次为:K1=1...

结构等效重力荷载代表值(等效重力荷载系数)

某五层钢筋混凝土框架结构办公楼,房屋高度25.45m。抗震设防烈度8度,设防类别丙类,设计基本地震加速度0.2g,设计地震分组第二组,场地类别为Ⅱ类,混凝土强度等级C30。该结构平面和竖向均规则。假定...

体系结构已成昭告后世善莫大焉(体系构架是什么意思)

实践先行也理论已初步完成框架结构留余后人后世子孙俗话说前人栽树后人乘凉在夏商周大明大清民国共和前人栽树下吾之辈已完成结构体系又俗话说青出于蓝而胜于蓝各个时期任务不同吾辈探索框架结构体系经历有限肯定发展...

框架柱抗震构造要求(框架柱抗震设计)

某现浇钢筋混凝土框架-剪力墙结构高层办公楼,抗震设防烈度为8度(0.2g),场地类别为Ⅱ类,抗震等级:框架二级,剪力墙一级,混凝土强度等级:框架柱及剪力墙C50,框架梁及楼板C35,纵向钢筋及箍筋均采...

梁的刚度、挠度控制(钢梁挠度过大会引起什么原因)

某办公楼为现浇钢筋混凝土框架结构,r0=1.0,混凝土强度等级C35,纵向钢筋采用HRB400,箍筋采用HPB300。其二层(中间楼层)的局部平面图和次梁L-1的计算简图如图1~3(Z)所示,其中,K...

死要面子!有钱做大玻璃窗,却没有钱做“柱和梁”,不怕房塌吗?

活久见,有钱做2层落地大玻璃窗,却没有钱做“柱子和圈梁”,这样的农村自建房,安全吗?最近刷到个魔幻施工现场,如下图,这栋5开间的农村自建房,居然做了2个全景落地窗仔细观察,这2个落地窗还是飘窗,为了追...

不是承重墙,物业也不让拆?话说装修就一定要拆墙才行么

最近发现好多朋友装修时总想拆墙“爆改”空间,别以为只要避开承重墙就能随便砸!我家楼上邻居去年装修,拆了阳台矮墙想扩客厅,结果物业直接上门叫停。后来才知道,这种配重墙拆了会让阳台承重失衡,整栋楼都可能变...

取消回复欢迎 发表评论: