2009-11-26 66 views
1

我需要使用ORM(休眠)在ColdFusion 9中編寫發票生成軟件。發電機=「遞增」是否足夠用於連續發票號碼?

其中一個要求是發票號碼必須是無間隙的順序,這意味着不可以跳過發票號碼。

數據庫標識值(即generator =「native」)不起作用,因爲如果事務未能提交,它將跳過一個數字。

按照CF9 documentation

增量:該算法通過增加由ORM保持計數器 生成型長,短,或 INT的 標識符。在 表中未啓用 主鍵的自動生成並且您希望ORM生成 主鍵時,通常會使用 。這應該在 單個ColdFusion實例僅用於將數據插入到 表中的 過程中使用。

Hibernate的增量生成器是否保證不會在失敗的事務中跳過?它夠好嗎?

如果不是,我應該怎麼做呢?由postInsert()中的線程安全序列號生成器插入發票號?

回答

1

發電機=「增值」是不是足夠好,可以保證在失敗的交易中不跳過順序發票號碼。

// 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被分配了偶數,但未保存。

0

看看Hibernate的文檔,看起來在配置這個生成器方面有相當大的靈活性。基本原理是它將從數據庫中查找ID的最大值,並向其中添加1。數字應該沒有差距。但是,您應該注意併發問題。

+0

根據文檔,只要它在CF的單個實例中使用,它就不應該有任何併發​​問題。 我想我真的不得不測試一下,看看失敗的事務是否會跳過生成的數字。 – Henry 2009-11-26 21:10:11