2015-07-03 55 views
1

我一直在尋找一種解決方案來生成唯一的標識,我找不到任何符合我的要求的東西。問題是:在java中有一些約束的唯一標識

我有一個數據庫表「交易」,它具有各種「供應商」進行的所有交易。所以,transactionId對於特定的供應商是唯一的。直到現在,我用Java中的隨機字母數字API生成transactionId以獲得唯一的值。到目前爲止好。現在,我們得到了供應商要求生成ID從1到999999的要求,達到上限後,我們需要將其重置爲1.對於此邏輯,我需要針對此供應商的事務標識自動遞增。我不能利用數據庫自​​動增量,因爲它不是整列。

一個解決方案,我現在所擁有的是 - 增加在該表插入功能的觸發和更新值由自動記錄的事務ID遞增,如果它是針對特定供應商。

我不是真正的快樂與此解決方案並尋求通過Java代碼的任何其他的想法可能更容易並且不會影響性能(例如:喜歡使用同步)。這種特定的邏輯適用於多個用戶同時執行事務的Web應用程序。任何建議都會有幫助。

在此先感謝。

+0

你試過這個嗎? https://www.sqlite.org/autoinc.html – Proxytype

+0

@Proxytype - 如果你打算通過ROWID,它沒有太大的幫助。一旦達到上限,我需要重置該值。讓我知道如果我失去了一些東西。 Thx –

回答

0

這是我的想法,你的里程可能會有所不同。您可以使用兩個字段vendor_name和transaction_id創建一個名爲say'vendor_transaction'的表。想法是維護此表中供應商的current_transaction_id。每個供應商在此表中都有一個條目,並且會爲您提供該供應商的當前transaction_id。

現在寫一個服務/工具,以獲得TRANSACTION_ID在原子操作一個給定的供應商。即。提供像increment_and_get(vendor_name)這樣的接口,它將遞增當前事務ID並返回事務中的值。此外,當事務ID爲999999

希望這會給你一些想法的工具/可以處理溢出的情況。

+0

這是一個好主意,關於如何鎖定這個特定方法的任何想法?對我的方法可以使用@Transactional,這就足夠了? –

+0

是的。 @交易裝飾應該做的伎倆。 – gipsy