【问题标题】:How to generate an alphanumeric ID in java?如何在java中生成字母数字ID?
【发布时间】:2013-03-21 19:36:24
【问题描述】:

我有一个名为 GROUPS 的表,其中有一列 GROUP_ID,其值为

GRP001、GRP002、GRP003

等等。现在每次我插入一个新行时,我都必须插入一个 (current) GROUP_ID= (highest)GROUP_ID+ 1 ,例如如果最高 GROUP_ID= GRP003 我必须在插入新行时生成一个新的 GROUP_ID GRP004。

如何使用 java 做到这一点?

我目前在我的程序中使用 Hibernate 和 Struts 2

有没有办法使用休眠来解决这个问题?或者我是否必须编写额外的代码来锁定表,检查数据库的最大 ID(然后增加它),最后释放锁?

【问题讨论】:

  • 这是在什么数据库上运行的?看这个问题-stackoverflow.com/questions/6346450/…你大概可以写一个类来生成密钥。不确定。为什么组 id 必须在其前面有“GRP”而不是直接序列 #?
  • 这个应用程序应该是独立于数据库的,这就是我使用 Hibernate 的原因,并且预定义组 ID 应该在其前面有“GRP”。

标签: java hibernate jakarta-ee sequence auto-increment


【解决方案1】:

我记得曾经解决过类似的问题。我所做的是创建了一个 hibernate 支持的自定义主键生成器。

这家伙在这里解释清楚:"Custom Hibernate Primary Key Generator"

基本上你只需要实现org.hibernate.id.IdentifierGenerator,所有的都应该设置好了。

请注意,上面示例中实现的解决方案是依赖于数据库的。但我认为有时常识应该胜过过度设计。

【讨论】:

  • 我阅读了您建议的链接,但我没有明白这一点“首先我创建了一个要使用的数据库序列。然后我实现了 org.hibernate.id.IdentifierGenerator”,我需要在哪里创建这个顺序?它在 GROUPS 表上吗?如何?
  • 大多数数据库都有一个序列生成函数,要么作为原生对象,要么作为函数调用。您可能必须为每个数据库类型编写一个自定义的 Tenerator 来生成一个序列。
  • @user2077648 sequence 主要是 Oracle 的东西,所以请确保您使用的是 Oracle。有关序列的更多说明,请参阅此处:stackoverflow.com/questions/798766/…
  • 我不允许为我的表实现序列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多