背景:我有一个名为 Contact 的数据库表。我系统的所有用户在此表中都有他们联系人的详细信息,包括名字、姓氏,以及一个名为“UniqueId”的 varchar 字段。系统用户可以在 UniqueId 字段中放置任何内容,只要它与该用户的其他联系人的唯一 ID 不同即可。
目标:我现在需要更改我的代码,以便在用户不提供唯一 ID 时自动生成唯一 ID。这应该简短且视觉上令人愉悦。理想情况下,它可能只是一个自动递增的数字。但是,AUTO_INCREMENT 适用于整数字段,而不是 varchar 字段。
另请注意,每个联系人 UniqueId 需要与该用户的其他联系人不同,但不一定对整个系统都是唯一的。因此,以下 UniqueIds 是有效的:
Contact
UserId Firstname Lastname UniqueId
1 Bob Jones 1
1 Harold Smith 2
2 Joe Bloggs 1
问题:那么,我该如何实现呢?是否有一种可靠且干净的方法可以让数据库为现有 UniqueId varchar 字段中的每个联系人生成一个唯一 ID(如果可能,这是我的偏好)?或者我是否被迫让 Java 去获取下一个可用的唯一 ID,如果是这样,那么最可靠的方法是什么?或者任何替代解决方案?
编辑 - 4 月 11 日上午:我们使用休眠来映射我们的字段。我刚刚开始研究这是否可以提供替代解决方案?有什么意见吗?
编辑 - 4 月 11 日下午:目前有 2 个选项很突出,但似乎都没有我想要的理想。
1.正如@eis 建议的那样,除了我当前的 varchar 字段之外,我还可以拥有一个自动递增字段。然后,当保存联系人时,也可以将 int 保存在 varchar 字段中,或者在检索联系人时,如果 varchar 为空,则可以使用 int。但是使用两个字段而不是一个字段感觉很混乱和错误
2.我正在考虑使用休眠生成器,如这里所讨论的。但这涉及在别处保存下一个 id 和 Java 代码的计数,并且似乎使该过程过于复杂。
如果我现有的 uniqueId 字段是一个 int 字段,则 AUTO_INCREMENT 将简单地工作,并且工作得很好。有没有办法让数据库生成这个但将它保存为字符串?