2015-04-18 61 views
1

在大多數Hibernate應用程序的我看到了明確的更新語句以dBhibernate中需要顯式更新嗎?

Session session1 = factory.openSession(); 
    Transaction tx1 = session1.beginTransaction(); 
    College college= (College)session1.get(College.class, 1); 
    college.setCollegeName("College_update"); 
    session1.saveOrUpdate(college); // at line 1 
    tx1.commit(); 
    session1.close(); 

更新任何休眠實體但是,即使我想念聲明1,實體在DB更新。我的問題是,當甚至不需要時提及明確的更新聲明 是一個好習慣嗎?

+2

不,這不是好習慣。你所看到的大部分代碼都來自不瞭解Hibernate基本特性的人。 –

+0

saveOrUpdate並不表示將數據保存到數據庫,需要提交事務以確認將數據保存到數據庫。 saveOrUpdate只發布沒有任何COMMIT的UPDATE SQL到數據庫。如果稍後發現任何錯誤,則可以回滾數據。 –

+0

@Shayan saveOrUpdate()甚至不會發出SQL更新。 –

回答

2

不,不需要saveOrUpdate語句。 College實體附加到Hibernate會話中,因爲它是由Hibernate實例化的。學院實體的任何突變都將在會話刷新時更新到數據庫。

當您需要將現有(分離)實體附加到休眠會話時使用saveOrUpdate。在該會議範圍內對該實體進行的任何後續突變都將被持續。

0

需要更新以從一個會話或事務中獲取數據並將其保存到另一個事務中的數據庫中。

A a = session1.load(......); 
// Commit transaction 

//Start New session ...... 

//Start transaction 
session2.update (a); 

如果讀取實體在同一個會話中更改其屬性,那麼當您刷新會話時結果將被保存。