Hibernate Is generator=";“增量”;对连续的发票号足够好吗?

Hibernate Is generator=";“增量”;对连续的发票号足够好吗?,hibernate,coldfusion,Hibernate,Coldfusion,我需要使用ORM(Hibernate)在ColdFusion 9中编写发票生成软件 其中一个要求是发票号必须是连续的,没有间隙,这意味着不能跳过任何发票号 数据库标识值(即generator=“native”)不起作用,因为如果事务提交失败,它会跳过一个数字 根据报告: 增量:此算法生成 长、短或短类型的标识符 通过增加一个计数器得到int 由ORM维护。这是常见的 用于自动生成 未在中启用主键 表,您希望ORM生成 主键。应在以下情况下使用此选项: ColdFusion的一个实例是 仅用于将数

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

其中一个要求是发票号必须是连续的,没有间隙,这意味着不能跳过任何发票号

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

根据报告:

增量:此算法生成 长、短或短类型的标识符 通过增加一个计数器得到int 由ORM维护。这是常见的 用于自动生成 未在中启用主键 表,您希望ORM生成 主键。应在以下情况下使用此选项: ColdFusion的一个实例是 仅用于将数据插入到 桌子

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


如果没有,我应该怎么做呢?通过postInsert()上的线程安全序列号生成器插入发票号?

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

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

generator=“increment”不够好,不能保证在失败的事务中不跳过顺序发票号

刚刚通过以下测试:

// 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被分配了偶数,但没有保存。

generator=“increment”不够好,不能保证在失败的交易中不跳过顺序发票号

刚刚通过以下测试:

// 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被分配了偶数,但没有保存。

根据文档,只要在CF的单个实例中使用,它就不应该有任何并发问题。我想我真的必须测试它,看看失败的事务是否会跳过生成的数字。根据文档,只要它在CF的单个实例中使用,就不应该有任何并发问题。我想我真的必须测试它,看看失败的事务是否会跳过生成的数字。