我需要使用ORM(Hibernate)在ColdFusion 9中编写发票生成软件。
其中一项要求是发票号码必须连续无间隙,这意味着不能跳过发票号码。
如果事务未能提交,则数据库标识值(即generator =“native”)不起作用,因为它会跳过一个数字。
增量:此算法生成 长,短或类型的标识符 int通过递增计数器 由ORM维护。这通常是 在自动生成时使用 主键未启用 表,你想要ORM生成 首要的关键。这应该在何时使用 ColdFusion的单个实例就是 只有进程才能将数据插入到 表
Hibernate的增量生成器是否保证不会在失败的事务中跳过?它够好吗?
如果没有,我应该怎么做呢?通过postInsert()?
中的线程安全序列号生成器插入发票号答案 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。数字应该没有差距。但是,您应该注意并发问题。