2009-11-28 53 views
2

我的结算软件的要求之一是,发票号码必须是连续的&连续。 (不可以跳过发票号码)。Hibernate/ColdFusion ORM中的序号和连续发票号码?

我试着将发票号码设置为PK,并尝试休眠的增量&本地生成器,但它们在事务失败时不保证连续数。下一张发票将有下一个发票号码,这会引入一个间隙(不连续)。

我该怎么办?

使用invoiceID作为PK,将invoiceNumber设置为Nullable列,并使用线程安全号码生成器在postInsert()处设置发票号码?

回答

4

是的,您需要自己分配发票号码,如果您需要它们是连续的(即连续)。

自动生成pseudokey值的方法容易产生间隙,因为在一般情况下,您可以使用ROLLBACKDELETE并留下间隙。

试图通过重新使用删除的值或重新编号现有记录来填补空白是一个可怕的想法。它受到比赛条件的限制,并且在任何情况下表现都很差。

pseudokeys的发生器保证是唯一的,但不是连续的。

您可能会有一个pseudokey作为主键,并且也有将发票号码作为恰好具有UNIQUE约束条件的属性。这似乎是多余的,但有时这是最简单的解决方案。