休眠自动增量

时间:2010-08-05 14:51:57

标签: java hibernate auto-increment

我正在使用hibernate的“增量”生成器来生成我的自动增量Id。这工作正常,直到我不得不添加另一个应用程序,它也使用“增量”生成器来生成新的ID。我意识到增量生成器有一个问题:

"generates identifiers of type long, short or int that are unique only when no other process is inserting data into the same table. Do not use in a cluster."

有没有办法用hibernate处理这个问题?或者我是否必须编写额外的代码来锁定表,检查db for max Id(然后增加它)并最终释放锁?使用一个休眠配置不是一个选项。此外,我无法将auto_increment选项添加到db表,因为我们在表上有多个键。

欢迎任何建议,我猜这是一个常见的问题。

1 个答案:

答案 0 :(得分:4)

several other generators可能会为您提供所需内容:

  • hilo 使用hi / lo算法有效地生成long,short或int类型的标识符,给定表和列(分别默认为hibernate_unique_key和next_hi)作为hi值的来源。 hi / lo算法生成仅对特定数据库唯一的标识符。
  • uuid :使用128位UUID算法生成字符串类型的标识符,这些标识符在网络中是唯一的(使用IP地址)。 UUID编码为长度为32个十六进制数字的字符串。

我建议您查看hi/lo

  

此外,我无法将auto_increment选项添加到db表中,因为表中有多个键。

我发现这个陈述令人困惑 - 如果表的主键使用多个列,则不能让一列自动递增?

为什么你会有一个多于一列的主键,其中一列是唯一的 - 这使得id字段不可能有多个值,从而否定了一个目的化合物PK。