【发布时间】:2012-04-25 20:52:50
【问题描述】:
这是我关于休眠的第二篇文章。自从我开始使用 hibernate 以来,它带来的问题比它解决的问题还多。这几乎让我觉得我应该坚持使用普通的旧 JDBC。总之,
这是我试图解决的问题之一。
.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。这是因为 oracle 序列中的 LAST_NUMBER 为: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
当我运行代码时,我看到在 Hibernate Debug 语句中生成的下一个序列为 200、201。
DEBUG SQL - select ADVENTURES_ID_SEQ.nextval from dual
DEBUG SequenceGenerator - Sequence identifier generated: 201
我预计 nextval 应该是 17600。似乎 oracle 序列根本没有被使用。
我的配置有什么问题以及如何修复它。非常感谢任何帮助。
谢谢
【问题讨论】:
-
如果你在同一个数据库上运行
select ADVENTURES_ID_SEQ.nextval from dual会产生什么? -
它给出了正确的值 17584、17585、17586 等。我们的 DBA 告诉我们信息表有时会显示不正确的值,在这种情况下是 17599。这个不正确的值是因为他们(Oracle)做了一些捷径来计算信息,它应该只用作指导。
-
我也遇到过类似的问题,也许有些用户可能会感兴趣。从 Hibernate 3 升级到 Hibernate 5,发生了一些变化。在 Hibernate 3 中,我从未编写过“allocationSize”参数,并且一切正常。在 Hibernate 5 中,我必须指定 allocationSize=1。我使用的是注释,而不是 hbm 文件。
标签: oracle hibernate sequence-generators