我對休眠比較新,所以請溫和。我遇到了長時間運行的方法(〜2分鐘長)以及更改存儲在數據庫中的對象上狀態字段值的問題。下面的僞代碼應該有助於解釋我的問題。導致競爭狀態的長時間運行方法
public foo(thing) {
if (thing.getStatus() == "ready") {
thing.setStatus("finished");
doSomethingAndTakeALongTime();
} else {
// Thing already has a status of finished. Send the user back a message.
}
}
該僞代碼不應該採取太多的解釋。我想doSomethingAndTakeALongTime()運行,但只有當它具有「準備就緒」的狀態。每當doSomethingAndTakeALongTime()花費2分鐘完成時,我的問題就會出現,並且事物狀態字段的更改在它離開foo()之前不會持久保存到數據庫。因此,另一個用戶可以在這2分鐘內發出請求,if語句將評估爲true。
我已經嘗試更新字段並手動刷新會話,但它似乎沒有工作。我不知道該從這裏做什麼,並希望得到任何幫助。
PS:我的hibernate會話是由spring管理的。
爲了避免紅鯡魚:你知道你應該使用'equals()'來比較字符串嗎? – BalusC 2010-05-26 22:06:25
您的方法是否在交易環境中,例如春季聲明式交易?如果是這樣,那麼沖洗將無法幫助,因爲其他用戶不會看到更改。 – mdma 2010-05-26 22:09:48
@BalusC,是的,我知道這一點。我的真實代碼不使用字符串;我剛剛創建了這個例子,並且不正確,爲了您的觀看樂趣。 :) – keeleyt83 2010-05-27 02:59:04