为什么Hibernate Hi-Lo算法策略将序列乘以50?
我正在使用Hibernate 5.3.7。将为什么Hibernate Hi-Lo算法策略将序列乘以50?,hibernate,Hibernate,我正在使用Hibernate 5.3.7。将hibernate.id.new_generator_映射设置为默认值从true到false后,唯一约束错误得到解决 但面对不同的id创建行为: Hibernate生成的Id=(Oracle序列的50*(start_with)值)+1 这是Hilo算法的默认行为吗 提前谢谢 建议的方法- Hi-Lo: 我可以读出hi和lo值的计算结果 [(hi-1)*incrementSize)+1,(hi*incrementSize)) 默认情况下,增量大小为50
hibernate.id.new_generator_映射设置为默认值从true到false后,唯一约束错误得到解决
但面对不同的id创建行为:
Hibernate生成的Id=(Oracle序列的50*(start_with)值)+1
这是Hilo算法的默认行为吗
提前谢谢
建议的方法-
Hi-Lo:
我可以读出hi和lo值的计算结果
[(hi-1)*incrementSize)+1,(hi*incrementSize))
默认情况下,增量大小为50
将起始值乘以50的原因是什么
例如:
我有一个序列起始值为5000的表
然后我的Hibernate应用程序将从(5000*50)=250000开始
池策略-在唯一约束异常中结束
还有:Oracle序列如何在使用过的ID上进行通信
根据本网站,id中的空白是正常的:
解决方案:
@Id
@GeneratedValue(策略=GenerationType.SEQUENCE,生成器=序列)
@SequenceGenerator(名称=序列,序列名称=序列)
私人长titId;
得到如下警告:
发现使用了不推荐的[org.hibernate.id.SequenceHilGenerator]基于序列的id生成器;请改用org.hibernate.id.enhanced.SequenceStyleGenerator。有关详细信息,请参阅《hibernate域模型映射指南》
然后将我的代码更改为SequenceStyleGenerator:
@Id
@GenericGenerator(name=“cmrSeq”,strategy=“org.hibernate.id.enhanced.SequenceStyleGenerator”,
参数={
@参数(name=“sequence\u name”,value=“sequence”)}
)
@GeneratedValue(生成器=“序列名称”)
私人长titId;
这解决了我的两个问题:
1) 不推荐使用的警告已修复2)现在,id是按照oracle序列生成的