2012-06-10 74 views
0

我有java的servlet應用+冬眠+流式服務器休眠數據一致性

流速:

  1. 用戶登錄開始視頻數據的基礎流
  2. 減量abonament分鐘每2秒
  3. 如果分鐘<新分鐘0的發送請求(響應可以是 長的時間後,如果是這樣繼續遞減)

問題:

出現數據一致性的問題,換句話說而遞減分鐘, 例如:user.setMinutes(user.getMinutes() - 2)可能無法看到新分鐘響應maded變化,和分鐘會被破壞

我想sollution可以創建新的Hibernate事務和每個當我改變分鐘時間提交,但這並沒有工作:

Transaction t = session.beginTransaction(); 
user.setMinutes() 
session.flush(); 
t.commit(); 

問題:

如何解決這個問題,當每個變化得到最新的數據?

+1

您的問題是什麼? – buc

+0

@buc - 增加它 – Sergey

回答

1

Hibernate的Session緩存的實體內存(你的情況User實體)。創建一個新的事務來改變剩餘的分鐘數是不夠的,你還必須重新加載其他任務所做的改變(附加分鐘請求)。您可以通過致電refresh()實現此目的:

session.refresh(user); 
user.setMinutes(user.getMinutes() - 2); 
session.flush(); 
+0

謝謝它的工作,我也發現這個方法 - 那麼Session.lock(用戶,LockMode.READ),你覺​​得是什麼也許會有幫助,或session.refresh()將在關? – Sergey

+1

@Sergey:據我所知,'那麼Session.lock()'不讀取數據庫變回實體,我會堅持使用'刷新()'是,如果作品。 – buc