一尘不染

使用序列时,Hibernate生成负ID值

hibernate

我有一个具有以下定义的类:

@Id
@SequenceGenerator(name = "SEQ_ACE_WORKERS_QUEUE_STATS_ID", sequenceName = "SEQ_ACE_WORKERS_QUEUE_STATS_ID", allocationSize = 500)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ACE_WORKERS_QUEUE_STATS_ID")
@Column(name = "ID")
private long Id;

当我们在Jboss 4.2.3上运行它时,它可以正常工作并生成正确的ID(从1000+开始)

现在我们转到jboss 7.1.1,它会生成负ID!(从-498开始,然后上升)

知道为什么会发生这种情况吗?


阅读 204

收藏
2020-06-20

共1个答案

一尘不染

从JBoss 6.1迁移到JBoss 7.1时遇到了这个问题。

根据JBoss AS 7.1
JPA文档(https://docs.jboss.org/author/display/AS71/JPA+Reference+Guide#JPAReferenceGuide-
Persistenceunitproperties),

JBoss
7.1自动设置几个hibernate属性。设置的属性之一是hibernate.id.new_generator_mappings激活使用不同算法并且不向后兼容的新ID生成器。在persistence.xml文件中将此属性设置为false将恢复旧的ID生成器行为。

hibernate
4文档还包含有关新ID生成器的信息:http :
//docs.jboss.org/hibernate/core/4.0/manual/en-US/html_single/#mapping-
declaration-id-generator。

hibernate文档清楚地指出,默认情况下未启用新的ID生成器,但是如上所述,JBoss 7.1会自动启用它们。

2020-06-20