我正在開發醫療通道中心的應用程序,其中多個用戶使用JSF和JPA爲醫生預訂預訂。序列號對於醫生,日期和會話是唯一的。我試圖通過計算以前的預訂來獲得唯一的序列號並添加一個,但如果兩個請求同時發生,則兩個預訂會得到相同的數字,從而導致功能性問題。 在這種情況下,我如何獲得唯一號碼?我可以使用應用程序範圍的bean來生成它嗎? (我認爲這是不practicle來從數據庫中獲取序列號的唯一編號,因爲有幾個醫生,會議和日常他們必須有不同的預訂號碼。)Java EE中的唯一編號生成
0
A
回答
1
這是我會怎麼做:
有6列在數據庫中的表:
- ID(自動生成的主鍵)
- doctorId
- 日期
- 會議
- 計數器
- 版本(映射到
@Version
註釋字段,樂觀鎖)
確保在[doctorId,日期,會議]添加唯一contraint。
創建服務,在自己的事務(REQUIRES_NEW傳播),稱爲
getNextValue(doctorId, date, session)
該服務運行應該拿到專櫃從數據庫表corresponfing它的三個參數,返回它,並增加它。如果還沒有行,它應該創建它。
仍有可能有兩個併發事務試圖同時創建或增加同一行。在創建的情況下,由於獨特的約束,其中一個交易會回滾。在增量的情況下,由於JPA樂觀鎖定,其中一個事務將回滾。
如果服務回滾,然後重試它,直到沒有異常了。
這避免了將所有這些計數器存儲在內存中,是無狀態的,因此如果重新啓動應用程序不會導致任何問題,並且即使您擁有一組服務器也能正常工作。
0
這是在數據庫中使用序列的最佳例子。
您應該在您的數據庫表中創建ID並確保該字段是通過序列自動生成的,然後您不必爲兩行使用相同的值而煩惱。
+0
您需要爲醫生,日期和會話的每個組合設置一個序列,這是不可能的。 –
相關問題
- 1. 生成唯一編號
- 2. 生成唯一序列號的java
- 3. 從種子生成的唯一編號
- 4. 在java應用程序中生成12位唯一編號
- 5. 生成唯一訂單號
- 6. 我們如何在Java中生成一個隨機但唯一的編號
- 7. 隨機唯一編號java
- 8. java中的隨機唯一編號
- 9. 需要生成與BDD的蟒蛇中的唯一編號
- 10. 如何在java中生成唯一的序列號?
- 11. 在CQ中生成自動增量唯一編號的策略
- 12. 根據Javascript中的字符串輸入生成唯一編號
- 13. 在數據庫中生成自動唯一編號
- 14. VBA - 在代碼中生成唯一編號
- 15. 如何在紅移中生成12位唯一編號?
- 16. 在動作腳本中生成唯一編號
- 17. 如何在C#或SQL Server中生成6位唯一編號?
- 18. 如何在複製副本中生成唯一編號?
- 19. 每天生成唯一的序列號
- 20. 自動生成的每次更新的唯一編號列
- 21. 生成的字母數字的唯一編號
- 22. C++中的唯一編號
- 23. 唯一的編號生成移位運算和驗證同樣在Java
- 24. 獲取隨機生成器生成的百分比唯一編號
- 25. 生成沒有數據庫的唯一編號
- 26. 跨系統生成唯一編號的算法
- 27. 如何自動生成唯一的debitnote編號
- 28. 生成唯一的隨機數字JAVA
- 29. 生成唯一
- 30. 唯一號碼標識符生成
非常感謝。這是我的問題的完美解決方案。 –