【发布时间】:2016-06-16 09:25:11
【问题描述】:
我需要创建一个实体表单,它在数据库中具有唯一标识列并且它不是主键列,我需要在表单创建页面中显示它。我已将此列设置为 UNIQUE 且不为空。现在,每当我创建一个新用户、员工或任何实体时,我都需要生成一个类似这种格式的序列号并在表单中显示,
ID_001, ID_002 ... ID_00N and so on.
EMP_001, EMP_002 ... EMP_00N and so on.
当三位序列号达到最大限制 999 时。序列号应生成四位数字,直到达到 9999,员工代码将类似于EMP_1000。因此,当我在创建表单时获得最后一个插入 id 时,如果多个用户同时创建并且会发生冲突,它将不起作用。我想过创建一个像sequence_generator 这样的新表。我存储实体最后插入 id 的键值对的位置。所以当下一次插入发生时,我可以从这个表中读取数据,并为新的序列号加 1。
那么我如何最好地实现这个在Java/MySql/Mybatis/Spring 中也是唯一的序列生成?
【问题讨论】:
-
为什么不尝试使用 UUID?
-
可以选择数据库序列吗?根据创建时间缓存是否有效,它可能包含漏洞甚至最终是非单调的,但即使使用分布式服务器,它也能确保唯一性。
-
@RenukaDeshmukh UUID 是随机生成的长字符串。我希望数字是连续的(如 001,002 等)。
-
并使用带有 BEFORE 顺序的 selectKey 将“EMP”添加到 keyproperty 中的 LAST_INSERT_ID 存储区并将其用作查询中的值?
-
你已经用“java”标记了这个问题——java在这里有什么相关性?