2011-06-16 47 views
1

當我在開放的hibernate會話中調用Session.flush()時會發生什麼?我更改了所有實體(保留,刪除,更新),並將保存/更新/刪除寫入數據庫,或者會話中的所有實體都寫入數據庫,並且如果我沒有對它們調用更新等?什麼是由Hibernate的Session.flush刷新()

我發現很多關於這方面的Hibernate資源,但沒有給出我準確的答案,我正在尋找。

一個簡單的例子:

class A { 

    @OneToOne 
    public B b; 

    public int x; 
} 

class B { 

    @OneToOne(mappedBy="b") 
    public B b; 

    public int y; 
} 


// Example 
A a = aDao.load(...); 
a.x = 20; 
b.y = 15; 
aDao.update(a); 

// Question: Will this update b's value to 15 in the database? 
session.flush(); 

若B將在上面的例子中被更新,我怎樣才能防止它?

感謝您的幫助!

回答

4

全部變化被寫入數據庫。沒有創建/修改/刪除的對象不會保存。

我不知道obj.setName(obj.getName())這樣的事情會發生什麼(即,當您觸摸某個屬性但不更改它時)。

+1

他們不會。通過persister的類型檢查對象是否相等(可能是字符串類型的名稱) – bestsss 2011-06-16 13:55:10

+1

另外,第一級高速緩存刷新也很重要,因爲它在長時間繪製的事務中變得很大。 – bestsss 2011-06-16 13:58:40