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

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_NAME

1           Ricky Martin

2           Madonna

3           Elvis Presley

4           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_NAME

1           Ricky Martin

2           Luciano Pavarotti

3           Elvis Presley


MM们
浏览 1544回答 3
3回答

RISEBY

这来自JPA。以一种非常简单的方式:persist(entity)应该与全新的实体一起使用,将它们添加到DB中(如果实体已经存在于DB中,则会抛出EntityExistsException)。应该使用merge(实体),如果实体已分离并已更改,则将实体放回持久性上下文。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java