有用於存儲一些唯一標識符的表。我的第一個想法是有這樣的每一個標識符前綴增量計列:Spring/JPA - 如何安全地增加計數器
ID IDENTIFIER COUNTER
1 B-1 1
2 A-1 1
3 A-2 2
4 A-3 3
5 B-2 2
6 BBA-1 1
7 BBA-2 2
每個標識符是由字母或字母組合,前綴和一些增量數延長。例如,如果我想添加一個帶有A-前綴的新標識符,則必須選擇計數器的最大值,其中IDENTIFIER
以'A-'開頭,返回值遞增1,並將其與搜索前綴連接並保存到數據庫。 有了這種方法,當兩個並行線程獲取相同的計數器值時,我害怕併發問題,唯一性規則將被違反。
我該如何預防?它是更好的辦法有兩個表,其中一個只照顧個別櫃檯的每一個標識符基礎,就像這樣:
BASE COUNTER
A 3
B 2
BBA 2
春天在什麼或JPA有一定的機制來處理這件事?我目前的首要想法是樂觀鎖定和註解。它會很有用,因爲我的項目中已經有JPA映射了嗎?
你能解釋爲什麼你的標識符是[字母] - [數字]格式嗎?這有什麼意義?記錄A-1和記錄A-2之間的關係是什麼?他們有什麼共同點? – Solace
「標識符」的格式對於這個問題並不重要。假設那些字母是某種類型的東西。用順序後綴和數據庫併發來生成它們是重點。 – shx
我問過,因爲版本註釋對於你描述的問題來說感覺過於誇張。您可以將Id註釋用於實體中的多個列。所以我建議你將字母和數字分成兩個單獨的列,並用Id註釋標記它們。您可以使用GeneratedValue註釋來自動遞增該數字列。請注意,在Hibernate中允許使用多個Id註釋,但不符合JPA。如果您想堅持使用JPA規則,您可以查看EmbeddedId註釋。 – Solace