大佬教程收集整理的这篇文章主要介绍了在JPA和Hibernate中,persist()和merge()之间有什么区别?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
JPA规范包含对这些操作的语义的非常精确的描述,比javadoc中的描述更好:
应用于实体X 的persist操作的语义如下:
如果x是新实体,则它将成为托管实体。实体X将在事务提交之时或之前或作为刷新操作的结果输入数据库中。
如果x是预先存在的管理实体,则persist操作将忽略它。但是,如果从X到这些其他实体的关系用cascade=PERSIST
或cascade=ALL
标注元素值标注或用等效的XML描述符元素指定,则持久操作将级联到X引用的实体 。
如果x是一个分离的对象,则 EntityExistsException
当persist
操作被调用时,或者可能抛出EntityExistsException
或另一个PersistenceException
可在冲洗被抛出或提交时间。
对于由X的关系引用的所有实体Y,如果与Y的关系已用级联元素值cascade=PERSIST或注释 cascade=ALL,则将持久操作应用于Y。
应用于实体X 的合并操作的语义如下:
如果x是新的实体实例,则创建新的管理实体实例X’,并将X的状态复制到新的管理实体实例X’中。
如果x是已删除的实体实例,IllegalArgumentexception
则合并操作将抛出an (否则事务提交将失败)。
如果x是受管实体,则合并操作将忽略它,但是,如果已用级联元素值cascade=MERGE
或 cascade=ALL注释对这些关系进行了注释,则合并操作将级联到X中的关系所引用的实体。
对于由来自具有级联元素值cascade=MERGE
或的X的关系引用的所有实体Y cascade=ALL,将Y递归合并为Y’。对于X引用的所有此类Y,将X’设置为引用Y’。(请注意,如果管理X,则X与X’是同一对象。)
如果x是合并到X’的实体,并引用了另一个实体Y(其中未指定cascade=MERGE
或未cascade=ALL指定),则从X’导航相同的关联会生成对具有与Y相同的持久标识的托管对象Y’的引用。
Hibernate中的persist()和merge()有什么区别?
persist()
可以创建updatE&INSERT查询,例如:
SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
A a=new A();
session.persist(a);
a.setName("Mario");
session.flush();
在这种情况下,将生成查询,如下所示:
Hibernate: insert into A (NAME,ID) values (?,?)
Hibernate: update A set NAME=? where ID=?
因此persist()
方法可以生成一个插入和一个更新。
现在@H_513_9@merge():
SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
Singer singer = new Singer();
singer.setName("Luciano Pavarotti");
session.merge(singer);
session.flush();
这是我在数据库中看到的:
SINGER_ID SINGER_NAME
1 Ricky MarTin
2 Madonna
3 Elvis Presley
4 Luciano Pavarotti
SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
Singer singer = new Singer();
singer.setId(2);
singer.setName("Luciano Pavarotti");
session.merge(singer);
session.flush();
这是我在数据库中看到的:
SINGER_ID SINGER_NAME
1 Ricky MarTin
2 Luciano Pavarotti
3 Elvis Presley
以上是大佬教程为你收集整理的在JPA和Hibernate中,persist()和merge()之间有什么区别?全部内容,希望文章能够帮你解决在JPA和Hibernate中,persist()和merge()之间有什么区别?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。