拥有用于存储一些唯一标识符的表。我的第一个想法是为每个标识符前缀添加增量计数器列,如下所示:
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
Spring或JPA是否有某种机制来处理这个问题?我目前的第一个想法是乐观锁定和@Version
注释。它是否有用,因为我的项目中已经有JPA映射了?
答案 0 :(得分:-1)
您可以在MySQL上使用CAS。
这里有$ count