当前位置: 首页 > 面试题库 >

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

谭凯
2023-03-14
问题内容

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

@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开始,然后上升)

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


问题答案:

从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会自动启用它们。



 类似资料:
  • 我在尝试将HiberNate与SAP HANA In-Memory数据库连接时遇到了一些性能问题,该数据库不支持AUTO_INCREMENT(http://scn.sap.com/thread/3238906)。 因此,我将HiberNate设置为使用序列生成ID。 但是当我插入大量记录(例如,40000)时,Hibernate首先会生成ID。它看起来像: 只有在生成所有 ID 后,它才会开始实际

  • 问题内容: 我有以下映射 SACP表根据 当我尝试保存Sacp实例时,Hibernate抱怨 ORA-01438:此列允许的值大于指定的精度 即使使用Long而不是Integer,也会引发相同的错误 我该怎么解决? 问题答案: 我发现了这个 SEQ_GEN使用名为my_sequence的序列定义序列生成器。此基于序列的hilo算法使用的分配大小为20。请注意,此版本的Hibernate Annot

  • 问题内容: 我的数据库是Oracle,我的id列值是Oracle序列,此序列由触发器执行,因此,在插入每一行之前,此触发器使用此序列来获取id值。因此,我对应该在实体类中定义哪个ID策略生成感到困惑。 要么 要么 真的很困惑,有人可以阐明这个问题吗?请清楚解释。 问题答案: 我还有一个projet,其中有一个Oracle DB将数据提供给我的@Entity类。如您所说,序列通过触发器为表的PK生成

  • 我一整天都在尝试从JPA/Hibernate的Postgres获取序列,但它给了我所有的时间: 信息:Hibernate:调用tb_cdr_id_seq的下一个值警告:SQL错误: 0,SQLState: 42601错误:错误:语法错误在或附近“调用”严重:javax.persistence.持久性异常:org.hibernate.exception.SQLGrammar异常:无法提取结果集 Po

  • 问题内容: 我有一个用序列生成的主键定义的实体: 我正在使用PostgreSQL,并且此密钥定义为序列号。根据PostgreSQL 退货 当我执行create()来持久化此实体的实例时,我在日志中看到以下内容(不相关的内容已被删除): 05 15:15:26.948 org.hibernate.id.enhanced.SequenceStructure [DEBUG]-获得的序列值:1604 05

  • 问题内容: 尝试将Hibernate与SAP HANA内存数据库连接时遇到一些性能问题,该数据库不支持AUTO_INCREMENT(http://scn.sap.com/thread/3238906)。 因此,我将Hibernate设置为使用序列进行ID生成。 但是,当我插入大量记录(例如40000)时,Hibernate首先会生成ID。看起来像: 并且只有在生成所有ID之后,它才开始实际插入。