【问题标题】:Why Hibernate Hi-Lo Algorithm Strategy multiply the sequence by 50?为什么Hibernate Hi-Lo算法策略将序列乘以50?
【发布时间】:2019-04-24 15:00:57
【问题描述】:

我正在使用 Hibernate 5.3.7。将hibernate.id.new_generator_mappings默认值从true设置为false后,唯一约束错误得到解决。

但面对不同的 id 创建行为:

Hibernate 生成的Id = ( 50 * (start_with) Oracle 序列的值) + 1

这是 Hilo 算法的默认行为吗?

提前致谢。

建议的方法 - https://hibernate.atlassian.net/browse/HHH-10983

嗨洛:https://vladmihalcea.com/the-hilo-algorithm/

我可以读取帽子 hi 和 lo 值将根据 [(hi -1) * incrementSize) + 1, (hi * incrementSize)) 默认情况下,incrementSize 为 50。

将 start_with 值乘以 50 的原因是什么?

例如:

我有一个序列起始值为 5000 的表

那么我的 Hibernate 应用程序将从 (5000 * 50) = 250000 开始

池化策略 - 以唯一约束异常结束

还有:Oracle 序列如何在使用的 id 上进行通信?

根据本网站,id 的差距是正常的:

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:369390500346406705

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    解决方案:

    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE) @SequenceGenerator(name = SEQUENCE, sequenceName = SEQUENCE) private Long titId;

    收到如下警告:

    发现使用了已弃用的 [org.hibernate.id.SequenceHiLoGenerator] 基于序列的 id 生成器;改用 org.hibernate.id.enhanced.SequenceStyleGenerator。有关详细信息,请参阅 Hibernate 域模型映射指南。

    然后将我的代码更改为 SequenceStyleGenerator:

    @Id @GenericGenerator(name="cmrSeq", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = { @Parameter(name = "sequence_name", value = "SEQUENCE")} ) @GeneratedValue(generator = "sequence_name") private Long titId;

    这解决了我的两个问题:

    1) 不推荐使用的警告已修复 2) 现在按照 oracle 序列生成 id。

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      相关资源
      最近更新 更多