2012-05-16 104 views
0

考慮一個場景 - 2個應用程序訪問/更新單個數據庫。其中一個應用程序正在使用休眠&已經從db獲得了一些記錄,現在將處理它們&保存回來。但在保存之前,其他應用程序會更新同一組記錄。在這種情況下會發生什麼? 休眠會在保存時拋出一個錯誤嗎?或休眠將有智能同步更新的記錄?休眠同時更新

+0

我認爲這是一個普遍的情況,它應該可以正常工作。我認爲它正在管理這個不休眠的數據庫。 –

回答

1

冬眠將拋出StaleObjectException。這裏是why

Hibernate使用optimistic locking來處理數據庫併發性。如果在當前事務提交更改之前要更新的數據被另一個事務修改,則會引發StaleObjectException

編輯:

以及如何冬眠確定對象在內存中的狀態是陳舊的?

Hibernate使用版本字段來跟蹤對實體的更改。此版本字段在每次提交時都會更新。現在,如果在提交之前版本號與在事務開始時讀取實體時的版本號不匹配,則引發StaleObjectException

+0

以及我們如何從這個異常中恢復? bcoz如果這種情況發生在生產中,那麼出路是什麼? –

+0

以及hibernate如何識別內存中對象的狀態是陳舊的? –

+0

從異常中恢復是主觀的,沒有最佳實踐。請檢查[this discussion thread。](https://forum.hibernate.org/viewtopic.php?t=942461&highlight=retry)Hibernate3似乎有一些解決方案。 – Santosh