這是我第二篇關於hibernate的文章。自從我開始使用hibernate以來,它已經給出了比它解決的問題更多的問題。這幾乎讓我覺得我應該堅持原始的JDBC。無論如何,Hibernate SequenceGenerator返回不正確的nextval
這是我試圖戰鬥的問題之一。
.hbm文件中的我的序列生成器如下所示。
<id name="id" type="long" column="ID">
<generator class="sequence">
<param name="sequence">ADVENTURES_ID_SEQ</param>
<param name="allocationSize">1</param>
<param name="initialValue">17599</param>
</generator>
</id>
請注意:初始值是17599.這是因爲LAST_NUMBER在oracle序列爲:17599
CREATED 25-APR-12
LAST_DDL_TIME 25-APR-12
SEQUENCE_OWNER ADVENTURE_ADMIN
SEQUENCE_NAME ADVENTURES_ID_SEQ
MIN_VALUE 1
MAX_VALUE 9999999999999999999999999999
INCREMENT_BY 1
CYCLE_FLAG N
ORDER_FLAG N
CACHE_SIZE 20
LAST_NUMBER 17599
當我運行我看到在201至200產生的下一個序列,該代碼Hibernate調試語句。
DEBUG SQL - select ADVENTURES_ID_SEQ.nextval from dual
DEBUG SequenceGenerator - Sequence identifier generated: 201
我預計nextval應該是17600.看起來像oracle序列根本沒有被使用。
我的配置有什麼問題,以及如何解決這個問題。任何幫助是極大的讚賞。
感謝
如果您在同一數據庫上運行'從雙選'選擇ADVENTURES_ID_SEQ.nextval,它會產生什麼? – Firo 2012-04-26 09:53:55
它給出了正確的值17584,17585,17586等。我們的DBA告訴我們信息表有時可以顯示不正確的值,在這種情況下是17599。這個不正確的值是因爲他們(Oracle)做了一些快捷方式來計算信息,它只能用作指導。 – n00bc0der 2012-04-26 13:46:58