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(实体),如果实体已分离并已更改,则将实体放回持久性上下文。
添加回答
举报
0/150
提交
取消