原来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出现短短一年不到时间,已经有29%的市场占有率,JPA也是对数据库的操作,它的优势是sun公司出品的,而且可以集成hibernate,不用谢映射表,我上传了一张JPA的生命周期图,供大家配合java-ee的api自学JPA用
JPA详细使用说明!由他一个足以!啥po的继承,一对多,多对多和JPA的配置该文档都有的!
EJB+JSF+JPA全JAVAEE视频教程,EJB+JSF+JPA入门觉得有点难吗?JBOSS报错?该教程全程教你学习搭建EJB+JSF+JPA框架!!!
该文档描述了JPA的来世今生,由浅入深地讲述了JPA概要、实体定义和基本注解、开发流程、JPA API和JPQL语言。将每个涉及到的细节讲得清晰、全面,可以作为学习JPA的指导文档!
JPA教程JPA教程JPA教程JPA教程JPA教程
jpa jpa规范 jpa源码 jpa jpa规范 jpa源码
EJB+JSF+JPA全JAVAEE视频教程,EJB+JSF+JPA入门觉得有点难吗?JBOSS报错?该教程全程教你学习搭建EJB+JSF+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 开发文档。 官网 Spring Data JPA API。
这个demo同时整合了springboot+JPA+mybatis这个两个orm框架。
jpajpajpajpajpajpajpajpajpajpajpajpajpa
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用的对象持久化的开发工作,实现ORM的统一。JPA作为一项对象持久化的标准,不但可以获得Java EE应用服务器的支持,还可以直接在Java SE中使用。JPA必将...
包括TOPLink JPA,Hibernate JPA,Open 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映射的神秘之旅两个pdf。
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和Hibernate的关系,JPA:Java Persistence APIJPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA注解创建数据库表 和hibernate.cfg.xml 建表