发电机=“增量”是否足以满足顺序发票号码?

时间:2009-11-26 20:27:18

标签: hibernate coldfusion

我需要使用ORM(Hibernate)在ColdFusion 9中编写发票生成软件。

其中一项要求是发票号码必须连续无间隙,这意味着不能跳过发票号码。

如果事务未能提交,则数据库标识值(即generator =“native”)不起作用,因为它会跳过一个数字。

根据CF9 documentation

  

增量:此算法生成   长,短或类型的标识符   int通过递增计数器   由ORM维护。这通常是   在自动生成时使用   主键未启用   表,你想要ORM生成   首要的关键。这应该在何时使用   ColdFusion的单个实例就是   只有进程才能将数据插入到   表

Hibernate的增量生成器是否保证不会在失败的事务中跳过?它够好吗?

如果没有,我应该怎么做呢?通过postInsert()?

中的线程安全序列号生成器插入发票号

2 个答案:

答案 0 :(得分:1)

generator =“increment” NOT 足以保证在失败的交易中不跳过顺序发票编号。

刚刚测试过:

// foo.cfc
/** @generator increment */
property numeric id;

// test.cfm
f1 = entityNew("foo");
f2 = entityNew("foo");
entitySave(f1);
ormflush();
eneitySave(f2);
throw();

然后我浏览test.cfm并刷新几次。 Foo表中的ID列都是奇数,因为f2被分配了偶数,但没有保存。

答案 1 :(得分:0)

查看Hibernate的文档,看来在配置此生成器方面存在相当大的灵活性。基本原则是它将从数据库中查找ID的最大值,并将其加1。数字应该没有差距。但是,您应该注意并发问题。