为了账号安全,请及时绑定邮箱和手机立即绑定

JPA和Hibernate中persist()和merge()有什么区别?

JPA和Hibernate中persist()和merge()有什么区别?

MM们 2019-08-15 14:30:20
JPA和Hibernate中persist()和merge()有什么区别?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()方法可以生成插入和更新。现在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_NAME1           Ricky Martin2           Madonna3           Elvis Presley4           Luciano Pavarotti现在使用更新记录 merge()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_NAME1           Ricky Martin2           Luciano Pavarotti3           Elvis Presley
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

这来自JPA。以一种非常简单的方式:

persist(entity)应该与全新的实体一起使用,将它们添加到DB中(如果实体已经存在于DB中,则会抛出EntityExistsException)。

应该使用merge(实体),如果实体已分离并已更改,则将实体放回持久性上下文。


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 1543 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信