我使用Hibernate來實現對運行Jboss5一個Web應用程序的DAO層(DB的Sybase)。我如何檢查DB是交易之間的鎖定
我面臨的問題是當客戶端/用戶界面多次同時進行HTTP調用時(這反過來又會調用DAO插入方法)會導致兩個調用在幾乎相同的時間運行DAO插入方法。我真正想要的是
- 第1請求調用DAO方法
- 1請求讀取當前的分貝值
- 檢查如果基於當前的分貝值
- 如果有效的新數據是有效的,插入新的價值
- ,然後第二個請求讀取當前dB值
- 檢查新數據是否有效
- 如果有效,將值...等等,如果有更多的呼叫
我DAO層的代碼看起來像這樣:
@Override
@Transactional
public Set<PartyData> insertPartyData(final Set<PartyData> pData) throws DataServiceException
{
sessionFactory.getCurrentSession().getTransaction().begin();
//code to read the current db value
//validation code to check if new value can be inserted based on what's currently in db
sessionFactory.getCurrentSession().save(pData);
sessionFactory.getCurrentSession().getTransaction().commit();
}
問題?
如何確保數據庫在一個事務的持續時間內鎖定表,以便任何其他請求等到上一個事務完成時纔會等待?
你使用什麼web容器? – MaVRoSCy
Web容器 - Jboss5 – kapricanon
您正在使用哪些DBMS? Postgres的?甲骨文? –