gpt4 book ai didi

java - Hibernate的SequenceStyleGenerator生成序列下面得到的序列值

转载 作者:行者123 更新时间:2023-11-30 03:57:17 26 4
gpt4 key购买 nike

我正在从 jBPM 5.4 转换为 jBPM 6,并相应地更新现有值的数据库。

大部分都进​​展顺利,除了在 WorkItemInfo 表中我得到了不正确的序列。正在生成的 ID 位于已采用的范围内,导致违反唯一约束。

打开调试日志记录后,我看到以下内容:

09:34:53,901 DEBUG [org.hibernate.id.enhanced.SequenceStructure] (EJB default - 1) Sequence value obtained: 81993
09:34:53,910 DEBUG [org.hibernate.event.internal.AbstractSaveEventListener] (EJB default - 1) Generated identifier: 81943, using strategy: org.hibernate.id.enhanced.SequenceStyleGenerator

我的问题是,为什么它生成的值低于当前序列(81943 与 81993)?这个生成的值落在已使用的 ID 范围内,因此导致我的唯一约束违规。

最佳答案

WorkItemInfo 似乎正在使用默认的 Hibernate 分配大小。这意味着 Hibernate 很可能会使用 TableHiLoGenerator ,简而言之,Hibernate 将使用该序列并减去分配大小。

您的序列很可能会增加 1,并且 Hiberate 使用默认值 50 作为分配大小。这可以解释为什么您的序列相差 50 (81943 - 50 = 81993)。

无需将 hibernate 代码更改为分配大小为 1(最佳实践);我的建议是将序列更改为键的最大值 + 1 并将增量从 1 增加到 50。

引用文献:

http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/id/TableHiLoGenerator.html http://tech.lds.org/wiki/Hibernate%2c_JPA%2c_and_Sequences

关于java - Hibernate的SequenceStyleGenerator生成序列下面得到的序列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22856583/

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