Was ist der Unterschied zwischen persist() und merge() in JPA und Hibernate?

Was ist der Unterschied zwischen persist() und merge() in den Ruhezustand?

persist() können, erstellen Sie einen UPDATE & INSERT-Abfrage, zB:

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

in diesem Fall Abfrage generiert wird, wie diese:

Hibernate: insert into A (NAME, ID) values (?, ?)
Hibernate: update A set NAME=? where ID=?

so persist() Methode kann generieren eine Insert-und eine Update.

Nun mit merge():

SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
Singer singer = new Singer();
singer.setName("Luciano Pavarotti");
session.merge(singer);
session.flush();

Dies ist, was ich sehe in der Datenbank:

SINGER_ID   SINGER_NAME
1           Ricky Martin
2           Madonna
3           Elvis Presley
4           Luciano Pavarotti

Nun einen Datensatz aktualisieren mit 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();

Dies ist, was ich sehe in der Datenbank:

SINGER_ID   SINGER_NAME
1           Ricky Martin
2           Luciano Pavarotti
3           Elvis Presley
InformationsquelleAutor Jimit Tank | 2010-12-22
Schreibe einen Kommentar