¿Cuál es la diferencia entre persist() y merge() en Hibernate?¿Cuál es la diferencia entre persist() y merge() en Hibernate?
persist()
puede crear una consulta INSERT ACTUALIZACIÓN &, por ejemplo:
SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
A a=new A();
session.persist(a);
a.setName("Mario");
session.flush();
en este caso consulta será generado como esto:
Hibernate: insert into A (NAME, ID) values (?, ?)
Hibernate: update A set NAME=? where ID=?
así persist()
método puede generar una inserción y una actualización.
Ahora con merge()
:
SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
Singer singer = new Singer();
singer.setName("Luciano Pavarotti");
session.merge(singer);
session.flush();
Esto es lo que veo en la base de datos:
SINGER_ID SINGER_NAME
1 Ricky Martin
2 Madonna
3 Elvis Presley
4 Luciano Pavarotti
Ahora actualizar un registro utilizando 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();
Esto es lo que veo en la base de datos:
SINGER_ID SINGER_NAME
1 Ricky Martin
2 Luciano Pavarotti
3 Elvis Presley
El javadoc es muy explícito sobre lo que hacen y cuáles son las diferencias. ¿Lo has leído y entendido? – skaffman
Compruebe http://stackoverflow.com/questions/161224/what-are-the-differences-between-the-different-saving-methods-in-hibernate –
http://stackoverflow.com/questions/1069992/jpa- entitymanager-why-use-persist-over-merge – Bozho