2009-05-20 51 views
1

如果我有一個持久性對象的實例,我在設置一些成員,像這樣:當一個持久化實例被設置但沒有改變時,hibernate會更新數據庫嗎?

MyThing thing = session.get(MyThing.class, id); 
thing.setSomething(thing.getSomething()); 
session.update(thing); 

這是否會真正使冬眠發出SQL更新命令刷新紀錄?或者hibernate足夠聰明,知道該對象已更新,但這些值實際上並沒有改變?

+0

是否使用純休眠這裏或JPA休眠(雖然我認爲你的意思session.flush(),不session.update(thing) ......除非你使用的是無狀態會話?)? – 2009-05-20 13:21:23

回答

2

通常,如果屬性值比較相等,則不應發出更新。 (具體來說,根據它們的類型實現 - 通常與它們的equals(Object)方法相同)比較相等。

nemo是對的,你應該始終知道SQL Hibernate正在執行什麼。儘管我建議將'org.hibernate.SQL'記錄器(Hibernate 2的'net.sf.hibernate.SQL')設置爲DEBUG級別(在log4j中),而不是使用「show_sql」屬性(它始終寫入System.out或System.err iirc)。

1

我相信它會足夠聰明地認識到對象沒有被改變,從而避免了更新。

確定的方法是打開Hibernate的SQL輸出。添加

<property name="hibernate.show_sql">true</property> 

在hibernate.cfg.xml中的會話工廠部分的hibernate配置。

0

AFAIK,它不會執行SQL命令。

相關問題