Hibernate中persist()和merge()之間的區別是什麼?Hibernate中persist()和merge()之間的區別是什麼?
persist()
可以創建一個UPDATE & INSERT查詢,例如:
Hibernate: insert into A (NAME, ID) values (?, ?)
Hibernate: update A set NAME=? where ID=?
所以persist()
方法可以產生一個Insert:
SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
A a=new A();
session.persist(a);
a.setName("Mario");
session.flush();
在這種情況下
查詢將這樣生成
和更新。
現在用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
javadoc對於他們做什麼以及它們之間的區別是非常明確的。你有沒有閱讀和理解它? – skaffman 2010-12-22 12:24:40
檢查http://stackoverflow.com/questions/161224/what-are-the-differences-between-the-different-saving-methods-in-hibernate – 2010-12-22 12:25:59
http://stackoverflow.com/questions/1069992/jpa- entitymanager-why-use-persist-over-merge – Bozho 2012-10-12 13:53:06