0
我在我的java多線程項目中得到了org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):
。Hibernate Row被另一個事務更新或刪除
我正試圖在兩個不同的線程內訪問相同的數據庫記錄。我該如何解決這個問題。這是我有錯誤的方法,
@Override
@Transactional
public Gamedetail getByExternalGameIdAndSource(String id, String dataSource) {
return (Gamedetail) sessionFactory.getCurrentSession().createCriteria(Gamedetail.class).add(Restrictions.eq("externalgameid", id))
.add(Restrictions.eq("datasource", dataSource)).uniqueResult();
}
我知道hibernate會話不支持多線程。我使用本機SQL查詢,但它給了我類拋出異常。提前感謝。
是一些還是一個線程更新相同的記錄?因爲在讀取記錄時不應該得到'org.hibernate.StaleObjectStateException'。 – Bunti
即使你可以修復它,但數據庫不會允許你同時修改相同的記錄/行 – AntJavaDev
@Bunti兩個線程同時運行,這兩個線程有無限循環。所以一個循環正在創建gameDetail對象。如果您沒有找到特定的gameDetail,則此方法將返回null,然後創建一個新的gameDetail記錄並保存它,否則會更新它。其他線程試圖訪問gameDetail並嘗試更新一些字段。 – Neero