【问题标题】:Hibernate + MySQL - How can I get not guessable generated ID?Hibernate + MySQL - 如何获得不可猜测的生成 ID?
【发布时间】:2018-04-23 18:29:32
【问题描述】:

如何让实体 ID(主键)难以猜测?

理想的是 8 位或 16 位随机唯一数字或字符串。

我尝试了 UUID,但由于报告了错误 (https://github.com/h2database/h2database/issues/345),我的 H2 测试失败了。

或者如果 ID 很难...我如何在创建时使用随机唯一编号自动生成另一列?

对于外部 API,我需要每个用户随机的、难以猜测的唯一 ID。

感谢您的任何建议。 :)

【问题讨论】:

  • UUID 作为字符串怎么样?

标签: java mysql hibernate jpa random


【解决方案1】:

您可以使用@PrePersist 注释将值分配给另一列。比如:

public class MyClass  {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    protected T id;

    @Column
    protected String clientKey;

    @PrePersist
    public void ensureClientKeyGenerated() {
          this.clientKey = UUID.randomUUID();  
    }

}

【讨论】:

  • 谢谢。这可能会解决我的问题:) 我会检查这个解决方案。
猜你喜欢
  • 2011-03-26
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多