问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Jpa中的persist方法和merge方法有哪些区别,帮我举一个例子解释下?_百 ...

发布网友 发布时间:2022-04-25 21:45

我来回答

5个回答

热心网友 时间:2022-04-10 16:45

1、含义不同

persist是保存,跟save方法一样,更接近持久化的含义;而merge是合并的意思,就是当保存的实体,根据主键id划分,如果已存在,那么就是更新操作,如果不存在,就是新增操作。

2、用法不同

persist会把传进去的实体放到持久化上下文中,此时如果持久化上下文中有了这个实体,就会抛出javax.persistence.EntityExistsException,没有的话事务提交的时候把那个对象加进数据库中。

而merge会在持久化上下文中生成传进去的实体的受管版本,如果已经有了受管版本,那也不会抛出异常,然后把那个受管的实体返回出来,事务提交的时候如果数据库中不存在那个对象(那一行),就把把那个受管的加进去,存在的话就替换掉原来的数据。

扩展资料:

JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。

JPA定义了独特的JPQL,JPQL是EJB
QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP
BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

参考资料来源:百度百科—JPA

热心网友 时间:2022-04-10 18:03

persist(),是保存,跟save()方法一样,知识jpa官方说叫persist比较好一些,更接近持久化的含义。而merge()是合并的意思,就是当你保存的实体,根据主键id划分,如果已存在,那么就是更新操作,如果不存在,就是新增操作。

persist会把传进去的实体放到持久化上下文中,此时如果持久化上下文中有了这个实体,就会抛出javax.persistence.EntityExistsException,没有的话事务提交的时候把那个对象加进数据库中,如果数据库中已经存在了那个对象(那一行),就会抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;

而merge会在持久化上下文中生成传进去的实体的受管版本,如果已经有了受管版本,那也不会抛出异常,然后把那个受管的实体返回出来,事务提交的时候如果数据库中不存在那个对象(那一行),就把把那个受管的加进去,存在的话就替换掉原来的数据。merge是如果持久化上下文中有了受管版本,那就更新,没有就复制一份,返回受管的。

再次总结persist(①,②-③,④-⑤):
(这里说的抛出的异常都是指对象(或者数据库中的行)重复的异常)
① 如果persist的是一个受管实体(即已经在上下文中),就不会抛出异常。
②如果persist的是一个游离实体(即上下文中没有它),而上下文中又没有它的受管版本,数据库中也没有,也不会抛出异常,而会把这个实体写进数据库中。
③如果persist的是一个游离实体(即上下文中没有),而上下文中又没有它的受管版本,数据库却有这个实体,那么EntityManager在persist它的时候不会抛出异常,但是事务提交的时候就会抛出异常:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '7' for key 1;
④如果persist的是一个游离实体(即上下文中没有),而上下文中却有它的受管版本,数据库中又没有这个实体,那么还是不会抛出异常,而是把它的受管版本加进去(不是那个游离的,是那个受管的!)(即,这种情况persist和没persist是一样的!)。
⑤如果persist的是一个游离实体(即上下文中没有),而上下文中却有它的受管版本,数据库中也有了这个实体,那么EntityManager在persist它的时候就会抛出异常:javax.persistence.EntityExistsException
而merge就不会抛出什么对象重复的异常的了。。

热心网友 时间:2022-04-10 19:38

persist(),是保存,跟save()方法一样,知识jpa官方说叫persist比较好一些,更接近持久化的含义。而merge()是合并的意思,就是当你保存的实体,根据主键id划分,如果已存在,那么就是更新操作,如果不存在,就是新增操作。

热心网友 时间:2022-04-11 04:43

merge 用来更新非持久对象,persist用来持久化对象

热心网友 时间:2022-04-11 07:41

merge[英][mɜ:dʒ][美][mɜ:rdʒ]
vt.& vi.融入; (使)混合; 相融; 渐渐消失在某物中;
persist[英][pəˈsɪst][美][pərˈsɪst]
v.坚持; 存留; 固执; 继续存在;
The company also has moved to merge overlapping procts.
谷歌还开始着手合并有交叉的产品。
The jitters in china's stock market could persist.
中国股市的恐慌情绪可能会持续下去。
Jpa中的persist方法和merge方法有哪些区别,帮我举一个例子解释下?_百 ...

1、含义不同 persist是保存,跟save方法一样,更接近持久化的含义;而merge是合并的意思,就是当保存的实体,根据主键id划分,如果已存在,那么就是更新操作,如果不存在,就是新增操作。2、用法不同 persist会把传进去的实体放到持久化上下文中,此时如果持久化上下文中有了这个实体,就会抛出javax.persis...

JPA的几个常用方法

1. persist():将临时状态的对象保存进数据库。【插入一条新记录】//由于涉及数据库增删改,执行该语句前需启用事务 entityManager.persist(modelObject);2.merge():将对象存入数据库,不同于persist(),merger()对于操作的对象,如果对象存在于数据库则对对象进行修改,如果对象在数据库中不存在,则将...

关于Jpa使用Update方法进行更新操作,却没有

1.先从数据查询到该实体,在将数据设置到从数据库查询的实体中,然后再保存,这是比较笨的方法。2.通过使用entityManager 中flush方法将已经使用merger方法进行托管的实体,更新到数据库。这里稍微解释下eneityManager。entityManager 有 merge/refresh/flush 方法。理解eneityManager的这三个方法的作用和区别...

如何自定义JpaRepository

publicvoidpersist(Objectentity);//将游离态的实体merge到当前的persistencecontext里面,一般用于更新。public<T>Tmerge(Tentity);//将实体对象删除,物理删除publicvoidremove(Objectentity);//将当前的persistencecontext中的实体,同步到数据库里面,只有执行了这个方法,上面的EntityManager的操作才会DB生效;publicvoidflush()...

persist和insist区别 persist和stick的区别 merge和rebase的区别 adhere和insist的区别 cache和persist的区别 append和merge的区别 merge和update的区别 suppose和assume区别 insist和keep的区别
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
凉拌黑木耳:泡发后需要用沸水焯多长时间啊? 请问怎样截图视频某段然后制作GIF动画呢???另外截图后,每个帧怎样做相... 手把手教你用 Chrome 制作 GIF 截图 四川达州中考录取分数线,? 宣汉昆池职业中学2024年分数线是多少 大竹县石子职业中学2024年分数线是多少 韦博开心豆少儿英语教学如何创新并保持学习动力与成果? 有什么好看的日漫?【 不要太老的 人物都很漂漂 】 谢谢na~ 推荐好看的日漫 类型无所谓,老一点也可以,新出的也可以。但绝对不... 兔属相和龙属相合不合 兔属相和什么相冲相克 jpa中自带方法save和saveAndFlush的区别 JPA中,如何让save()操作立即更新到数据库中,然后查询从数据库中查询 OPPOA5怎么看保修期 OPPOA5哪里可以看到一天的屏幕唤醒时间? OPPO手机a5中没有应用使用时间那应该安装什么软件去查了? oppoa5怎么查看最近用的软件 远侧端腕骨自桡侧到尺侧的排列顺序 OPPOa5有应用使用时间吗? 高中的生物要自学来迎接高考应注重哪些点? 骨折考点有口诀巧记吗? 医学名词怎么记的牢 系统解剖学学习怎么样解决大量专业词汇的记忆问题? 解剖学要怎么样学才能学的好呢 车险刚买5天可以退么 如何学好人体解剖学? 眶腔和鼻腔的骨有哪些? 生物课上,安妮在学习人体的骨骼系统时遇到了很大的困难。她能够很容易地记住一些骨头的名字, 医学界有什么经典语录? 腕骨有分别叫什么 《零秒工作速度解决一切的麦肯锡工作术》pdf下载在线阅读,求百度网盘云资源 Spring Data Jpa新增和更新的问题。 springboot 使用JPA关于多对多将数据保存到关联表中的问题 jpa如何用id更新数据? srping jpa 怎么用save jpa 执行调用service加载数据时为什么会执行update操作 java jpa 为啥要序列化实体类? hibernate中的update()与saveOrUpdate()的区别,load()与get()的区别... spring-data-jpa循环保存数据,为什么只保存了最后一条数据 怎样判断hibernate的 save方法是否成功,跳转页面用 java用JPA怎么把图片存入到Oracle数据库中,然后展示在jsp页面?注:保存... 为什么spring data jpa添加数据会自动变为修改数据? spring dat jpa 多对多表关联,引用id替代对象引用实现 hibernate,jpa数据库连接问题。我没法确定要连接什么数据库,但是我要用... 如何用pagingandsortingr SpringMVC JPA 事务,单元测试通过,控制器不开启事务,如何解决 信用卡逾期直接划走储蓄卡 信用卡欠款储蓄卡的钱会被直接划走吗 信用卡逾期了,从银行卡里扣了怎么办? 建设银行信用卡逾期,储蓄卡的钱被扣了,咋办? 建行信用卡逾期,为什么会自动扣除我建行储蓄卡的钱。可以不让扣吗?_百...