gpt4 book ai didi

java - Hibernate 抛出 PK 违规错误

转载 作者:搜寻专家 更新时间:2023-11-01 01:37:01 25 4
gpt4 key购买 nike

我一直在使用 hibernate 和 jboss 4.2.3,一切正常,现在我将代码迁移到 Jboss 7.1.1,突然我开始得到:

Caused by: org.hibernate.exception.ConstraintViolationException: ORA-00001: unique constraint (OBLICORE.PK_ACE_WORKERS_QUEUE_STATS_ID) violated

生成的 ID 也是负数。

失败的实体定义如下:

@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;

我检查了 Oracle 中的序列,它似乎没问题(就像我说的,它以前适用于 jboss 4.2,并且自迁移以来数据库方面没有任何变化)。

我尝试编写 Hibernate 查询日志,但找不到该查询,而且我还记录了持久保存此类的特定调用,发现它只被调用一次。

最佳答案

检查这个问题:hibernate oracle sequence produces large gap

肯定是Hibernate的sequence generator默认了Hi/Lo算法,返回值溢出。您可以尝试使用特定于 hibernate 的注释来默认为旧行为 GenericGenerator(name="blah", strategy="sequence"),或设置 allocationSize=1

如果您依赖序列递增某个大于 1 的值,则必须使用不同的生成器。或者将 hibernate.id.new_generator_mappings 设置为 false 就足够了,但这在新问题的范围内。

关于java - Hibernate 抛出 PK 违规错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9887838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com