gpt4 book ai didi

java - 自动生成唯一的 varchar 字段 - mySQL、Java、Hibernate

转载 作者:行者123 更新时间:2023-11-29 08:33:26 24 4
gpt4 key购买 nike

背景:我有一个名为“联系人”的数据库表。我系统的所有用户在此表中都有其联系人的详细信息,包括名字、姓氏以及名为“UniqueId”的 varchar 字段。系统用户可以在 UniqueId 字段中输入任何内容,只要它与该用户的其他联系人的唯一 ID 不同即可。

目标:我现在需要更改我的代码,以便在用户未提供唯一 ID 的情况下自动生成唯一 ID。这应该很短并且视觉上令人愉悦。理想情况下,它可能只是一个自动递增的数字。但是,AUTO_INCRMENT 适用于整数字段,而不适用于 varchar 字段。

另请注意,每个联系人 UniqueId 需要与该用户的其他联系人不同,但对于整个系统不一定是唯一的。因此,以下 UniqueId 是有效的:

Contact
UserId Firstname Lastname UniqueId
1 Bob Jones 1
1 Harold Smith 2
2 Joe Bloggs 1

问题:那么,我怎样才能实现这一目标呢?是否有一种可靠且干净的方法让数据库为现有 UniqueId varchar 字段中的每个联系人生成唯一的 id(如果可能的话,这是我的偏好)?或者我是否被迫让Java去获取下一个可用的唯一ID,如果是这样,最可靠的方法是什么?或者有其他解决方案吗?

编辑 - 4 月 11 日上午:我们使用 hibernate 来映射我们的字段。我刚刚开始研究这是否可以提供替代解决方案?有意见吗?

编辑 - 4 月 11 日下午:目前有 2 个选项很突出,但似乎都没有我想要的那么理想。

1. 正如 @eis 所建议的,除了当前的 varchar 字段之外,我还可以有一个自动递增字段。然后,当保存联系人时,也可以将 int 保存在 varchar 字段中,或者当检索联系人时,如果 varchar 为空,则可以使用 int。但使用两个字段而不是一个字段感觉很困惑和错误

2.我正在考虑使用 hibernate 生成器,如here所述。但这涉及到在其他地方保存下一个 id 的计数和 Java 代码,并且似乎使过程变得过于复杂。

如果我现有的 uniqueId 字段是一个 int 字段,那么 AUTO_INCRMENT 就可以工作,而且工作得很好。有没有办法让数据库生成这个但将其保存为字符串?

最佳答案

我认为你真正应该做的是放弃当前的“uniqueid”并生成在整个系统中真正唯一的新ID,始终自动生成并且从不由用户提供。您需要执行单独的工作才能迁移到新系统。这是我认为保持理智的唯一方法。如果需要,用户可以提供别名之类的东西,以便在视觉上更令人愉悦。

从好的方面来说,您可以使用自动增量。

<小时/>

好吧,如果您确实想要您所要求的内容,那么还有一个额外的选择。您可以有一个用户永远不允许的前缀,例如 §§§§,并且始终基于该前缀自动生成 id,例如 §§§§1 §§§§2 等。如果您不允许最终用户以该前缀开头的任何内容,您就会知道不会发生冲突,并且您可以在需要时一一生成它们。

序列是为其生成数字的理想选择。 MySQL 中没有序列,但您可以模拟它们,例如 like this .

关于java - 自动生成唯一的 varchar 字段 - mySQL、Java、Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com