`
allen413
  • 浏览: 95621 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

JPA的merge和persist !

阅读更多
原来merge()也有persist()的作用!
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就不会抛出什么对象重复的异常的了。。
分享到:
评论

相关推荐

    JPA注解总结大全!!!!

    详细的JPA注解总结大全 ,,,,,,,

    JPA的生命周期图!!!

    jpa出现短短一年不到时间,已经有29%的市场占有率,JPA也是对数据库的操作,它的优势是sun公司出品的,而且可以集成hibernate,不用谢映射表,我上传了一张JPA的生命周期图,供大家配合java-ee的api自学JPA用

    JPA总结各种情况

    JPA详细使用说明!由他一个足以!啥po的继承,一对多,多对多和JPA的配置该文档都有的!

    EJB+JSF+JPA全JAVAEE视频教程

    EJB+JSF+JPA全JAVAEE视频教程,EJB+JSF+JPA入门觉得有点难吗?JBOSS报错?该教程全程教你学习搭建EJB+JSF+JPA框架!!!

    JPA深入浅出

    该文档描述了JPA的来世今生,由浅入深地讲述了JPA概要、实体定义和基本注解、开发流程、JPA API和JPQL语言。将每个涉及到的细节讲得清晰、全面,可以作为学习JPA的指导文档!

    JPA教程JPA教程JPA教程

    JPA教程JPA教程JPA教程JPA教程JPA教程

    JPA源文件/jpa学习

    jpa jpa规范 jpa源码 jpa jpa规范 jpa源码

    EJB+JSF+JPAJAVAEE视频教程

    EJB+JSF+JPA全JAVAEE视频教程,EJB+JSF+JPA入门觉得有点难吗?JBOSS报错?该教程全程教你学习搭建EJB+JSF+JPA框架!!!这是百度网盘的链接,你懂的,呵呵。

    JPA开发手册

    4.3持久化Entity(Persist) 11 4.4获取Entity 13 4.5更新Entity 13 4.6删除Entity 14 4.7脱离/附合(Detach/Merge) 14 5. JPA Query 15 5.1 Query接口 15 5.2简单查询 16 5.3使用参数查询 17 5.4排序(order by) 17 5.5...

    Spring Data JPA API(Spring Data JPA 开发文档).CHM

    Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。

    springboot同时整合JPA和mybatis的demo

    这个demo同时整合了springboot+JPA+mybatis这个两个orm框架。

    jpa例子jpajpa

    jpajpajpajpajpajpajpajpajpajpajpajpajpa

    黎活明老师讲解的JPA源码

    JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用的对象持久化的开发工作,实现ORM的统一。JPA作为一项对象持久化的标准,不但可以获得Java EE应用服务器的支持,还可以直接在Java SE中使用。JPA必将...

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    尚硅谷JPA视频教程

    · 0. JPA视频_PPT及源码 · 1.... JPA视频_JPQL_ORDER BY 和 GROUP BY · 21. JPA视频_JPQL_关联查询 · 22. JPA视频_JPQL_子查询和内建函数 · 23. JPA视频_JPQL_DELETE和UPDATE · 24. JPA视频_整合Spring

    学习hibernate必读,JPA2新特征和JPA2映射的神秘之旅。

    学习hibernate必读,包括JPA2新特征和JPA2映射的神秘之旅两个pdf。

    JPA持久化简介

    Hibernate、iBATIS、TopLink、Castor JDO、Apache OJB等这么多持久层框架,你还在为学习上面那个框架而苦恼吗?你还为研究下一代是那个而头疼吗?...朋友,学习JPA吧!JPA的出现就是解决您上面的苦恼的。

    jpa 关联映射jpa 关联映射jpa 关联映射

    jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联...

    JPA和Hibernate的关系

    JPA和Hibernate的关系,JPA:Java Persistence APIJPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

    JPA注解 和hibernate 建表

    JPA注解创建数据库表 和hibernate.cfg.xml 建表

Global site tag (gtag.js) - Google Analytics