这是我第二篇关于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