【问题标题】:How to generate 6 char random variable如何生成 6 个字符的随机变量
【发布时间】:2018-11-09 10:24:59
【问题描述】:

我的实体需要一个唯一的字母数字 code

这不是身份证。还有身份证。而且,这个code 字段是独一无二的。

会是这样的

"BS" + 6 alphanumeric chars 

6 个字母数字。

“BS”是默认字符串。所以,他们都将在开头有“BS”

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id", updatable = false, nullable = false)
private Long id;

我正在使用弹簧靴。使用休眠,我可以做这样的事情,但我需要将尺寸设为 8 或 6+2。

我的 sql 也有 @Generator 但我做不到

而且每次,我都不想从数据库中获取、递增和保存。我觉得这不是好办法?

我能做什么?自定义generator

我也在找这个

https://stackoverflow.com/a/47934704/10309977

但没办法看到做

大约有 1000 代。所以每年大约 1-10 百万。

【问题讨论】:

标签: hibernate spring-boot


【解决方案1】:

实现您需要的逻辑的自定义生成器似乎是生成您独特的字母数字“代码”的最佳方式。

GUID/UUID 的“问题”是它们具有固定长度(比您需要的长),您仍然可以获得子字符串,但您可能对如何生成值有一个模式。

根据我的经验,我总是根据可以解释并从中检索信息的模式生成唯一的随机代码值。这是我的方法。您有 62 个字符集,可用于 26 个小写字母、26 个大写字母和 10 个数字。

如果您的 `code` 应该以 `"-" +2 numbers` 结尾,您必须生成 5 个字符的字符串,然后连接您的 2 个数字。

另外,您可能需要让您的“代码”长度超过 8 个字符

【讨论】:

  • 但是每天会创建 10000 个新对象。所以,在一分钟内可能有 1000 个。它不可能是唯一的。
  • 这就是为什么您应该考虑增加code 的字符数的原因,但如果您的code 生成算法是可靠的并且很好地认为它可以是独一无二的。您可以计算出您可以使用您拥有的集合理想地生成多少个codes
  • 我如何在保存时检查它是否存在,除了例外?
  • 您应该将 unique=true 属性设置为实体中的代码列。如果不满足约束,它将抛出异常
  • 但是如果抛出异常,我应该再次尝试保存该实体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 2013-10-10
  • 1970-01-01
相关资源
最近更新 更多