В чем разница между persist () и merge () в JPA и Hibernate?

В чем разница между persist () и merge () в Hibernate?

persist () может создать запрос UPDATE & INSERT, например:

SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
A a=new A();
session.persist(a);
a.setName("Mario");
session.flush();

в этом case запрос будет сгенерирован следующим образом:

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
115
задан Vlad Mihalcea 10 December 2018 в 12:30
поделиться