【问题标题】:Unique id with some constraints in javajava中具有一些约束的唯一ID
【发布时间】:2015-09-21 07:27:19
【问题描述】:

我一直在寻找生成唯一 ID 的解决方案,但找不到符合我要求的任何内容。问题是:

我有一个数据库表“事务”,其中包含各种“供应商”执行的所有事务。因此,transactionId 对于特定供应商是唯一的。到目前为止,我曾经在 java 中使用随机字母数字 API 生成 transactionId 以获得唯一值。到目前为止很好。现在,我们从供应商那里得到一个要求,从 1 到 999999 生成 id,在达到上限后,我们需要将其重置为 1。对于这个逻辑,我需要一个特定于该供应商的事务 id 的自动增量。我不能利用数据库自​​动增量,因为它不在整个列上。

我现在拥有的一个解决方案是 - 在该表插入函数上添加一个触发器,并通过自动递增该特定供应商来更新记录的事务 ID 值。

我对这个解决方案并不满意,并通过 java 代码寻找任何其他想法,这可能会使它更容易并且不会影响性能(例如:如使用同步)。此特定逻辑适用于多个用户将同时执行事务的 Web 应用程序。任何建议都会有帮助。

提前致谢。

【问题讨论】:

  • 你试过了吗? sqlite.org/autoinc.html
  • @Proxytype - 如果你打算通过 ROWID,它没有多大帮助。一旦达到上限,我需要重置该值。如果我遗漏了什么,请告诉我。谢谢

标签: java mysql auto-increment uniqueidentifier


【解决方案1】:

这就是我的想法,您的里程可能会有所不同。您可以创建一个名为“vendor_transaction”的表,其中包含两个字段 vendor_name 和 transaction_id。想法是在此表中维护供应商的 current_transaction_id。每个供应商在此表中都有一个条目,它将为您提供该供应商的当前 transaction_id。

现在编写一个服务/实用程序以在原子操作中获取给定供应商的 transaction_id。 IE。提供一个像 increment_and_get(vendor_name) 这样的接口,它将增加当前事务 id 并返回事务中的值。当事务 id 为 999999 时,实用程序/可以处理溢出情况。

希望这能给你一些想法。

【讨论】:

  • 这是个好主意,关于如何锁定这个特定方法的任何想法?可以在我的方法上使用@Transactional 就足够了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2020-01-27
  • 1970-01-01
  • 2013-12-16
  • 2016-10-08
  • 1970-01-01
相关资源
最近更新 更多