我想我有一個相當簡單的任務,即根據某些條件向表中添加新記錄時手動增加ID。JPA:手動增加,避免競爭條件(MySQL)
比方說,我有表格書和章。 Chapter有自動增量章節ID,外鍵BookId和章節號。每次我在書中添加章節時,我都希望ChapterNo爲本章所屬的特定書增加1。可以通過簡單的SQL語句完成:插入章節(BookId,ChapterNo)值(XXX,從BookId = XXX的章節中選擇max(ChapterNo)+ 1)。但有沒有辦法在JPA中做到這一點,並避免競爭條件(如果我先閱讀max ChapterNo然後再執行插入操作,將會發生這種情況)
更新:迄今爲止唯一合理的解決方案:實現數據庫觸發器負責增加章節號。那麼至少我不需要JPA方面的本地查詢
我認爲你應該可以通過使用事務和悲觀鎖定來防止其他人同時插入章節。我知道JPA支持悲觀鎖定,但我不知道細節。 – Eelke