簡體   English   中英

實體/行僅在春季/休眠時才更新?

[英]Entity/row is updated only sometimes with Spring/Hibernate?

每當有人“打開”設備時,我都有一個更新的表(帶有時間戳和user_id)。 該設備表也是包含device_ids,device_names等的“核心”表。我從Spring使用@Transactional標記了方法,並且將“ devices”表標記為實體。

我希望當我更改實體時,由於該方法被標記為Transactional,因此當該方法關閉時,數據庫將被更新。 但這不是(總是)發生。 我已經從服務器檢查了日志,沒有看到SQL異常。 catalina.out看起來不錯,MySQL也會記錄錯誤。 這里可能是什么問題? 我應該在此方法結束之前明確保存更新的Entity嗎?

是的,所以這最終導致了兩個線程的競爭狀況問題。 由於一個線程將使用@Transactional批注在Spring中啟動事務,然后另一個線程將啟動,因此它們都在同一點具有相同的數據,但通常在以后提交,因此給人以行鎖定問題的印象。 某個地方有一個合理的解決方案,無論是強制您的事務具有不同的隔離級別,例如:對於可觸摸同一行的方法,可Serializable ,或者僅使用@DynamicUpdate東西更新實體,但它們都有優點/缺點和嘗試修復某些奇怪的比賽條件(如我遇到的問題)時,都應考慮兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM